【发布时间】:2012-02-15 23:04:12
【问题描述】:
我被分配创建一个执行基本集合操作的程序。说明如下:
您应该将集合表示为无符号整数,其中每个位 无符号数的 表示集合的一个可能元素。因此, 我们有 32 个可能的集合元素 (0, 1, ... 31) 和 32 位位置 一个无符号整数变量(也是 0、1、... 31)。为此目的 程序不管你是否“命名”最低位 一个无符号整数为 0(最高位为 31),或者如果你 “命名”最高位 0 和最低位 31。无论哪种情况,我们都会 在位 i 中定义一个“1”表示元素 i 是 该无符号整数表示的集合。
我的第一个想法是使用数组来存储数据,但是我的教授告诉我不要这样做,而只使用无符号整数。我的问题是如何去实施这个?我的印象是,如果我在打印出来时将 unsigned int 设置为 00000000000000000,我在输出时仍然会得到 0。如果没有 400 万个测试用例,我应该如何检查集合中的每个成员?
例如,他说要重复一组 {19, 3, 31, 12, 7} 我会拥有
10000000000010000001000010001000
他提供的我将被要求构建我的定义的声明是:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
extern unsigned int setUnion(unsigned int set1, unsigned int set2);
extern unsigned int setIntersection(unsigned int set1, unsigned int set2);
extern void clearSet(unsigned int *set);
extern void add2Set(unsigned int *set, int value);
extern void deleteFromSet(unsigned int *set, int value);
extern int isMember(unsigned int set, int element);
extern void printSet(unsigned int);
任何关于如何做到这一点的想法将不胜感激。我不指望你们为我做功课,只是在寻找一些关于如何开始的帮助。
【问题讨论】:
-
en.wikipedia.org/wiki/Bitwise_operation - 他要求您在无符号(32 位)整数中设置特定位。
-
Hmmmm....我编辑这个问题似乎放弃了作业问题的答案,不是吗? :)
标签: c