46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
#include <stdio.h>
|
|
|
|
typedef unsigned int set_t; /* probably 32 bits; change according to need */
|
|
|
|
void show_set(set_t x, const char *name)
|
|
{
|
|
int i;
|
|
printf("%s is:", name);
|
|
for (i = 0; (1U << i) <= x; i++)
|
|
if (x & (1U << i))
|
|
printf(" %d", i);
|
|
putchar('\n');
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
int i;
|
|
set_t a, b, c;
|
|
|
|
a = 0; /* empty set */
|
|
for (i = 0; i < 10; i += 3) /* add 0 3 6 9 to set a */
|
|
a |= (1U << i);
|
|
show_set(a, "a");
|
|
|
|
for (i = 0; i < 5; i++)
|
|
printf("\t%d%s in set a\n", i, (a & (1U << i)) ? "":" not");
|
|
|
|
b = a;
|
|
b |= (1U << 5); b |= (1U << 10); /* b is a plus 5, 10 */
|
|
b &= ~(1U << 0); /* sans 0 */
|
|
show_set(b, "b");
|
|
|
|
show_set(a | b, "union(a, b)");
|
|
show_set(c = a & b, "c = common(a, b)");
|
|
show_set(a & ~b, "a - b"); /* diff, not arithmetic minus */
|
|
show_set(b & ~a, "b - a");
|
|
printf("b is%s a subset of a\n", !(b & ~a) ? "" : " not");
|
|
printf("c is%s a subset of a\n", !(c & ~a) ? "" : " not");
|
|
|
|
printf("union(a, b) - common(a, b) %s union(a - b, b - a)\n",
|
|
((a | b) & ~(a & b)) == ((a & ~b) | (b & ~a))
|
|
? "equals" : "does not equal");
|
|
|
|
return 0;
|
|
}
|