假设我们有
int *set1 = malloc(n);
int *set2 = malloc(n);
然后我们用数据填充这两个集合。我的目标是逐位执行或在set1和set2之间执行。
我想我不能做像这样的事情
for (i=0; i<n; i++) {
set1[i] = set1[i] | set2[i];
}
因为n是字节数,而不是数组的单元数。
有什么想法吗?提前感谢
size_t elements = n / sizeof *set;
for ( i = 0; i < elements; i++ )
set1[i] = set1[i] | set2[i];
注:
表达式
*set1
的类型为int
;因此表达式CCD_ 3与CCD_。我更喜欢使用这样的表达式,而不是显式命名类型;如果CCD_ 5的类型需要改变。如果
n
是字节数,则n / sizeof *set1
是阵列中int
元素的数目。请记住,在C中,整数除法会产生一个整数结果-如果n
不是sizeof (int)
的倍数,那么结果将是n / sizeof (int)
的底,即7/4 == 1
、11/4 == 2
等。这也意味着你不会访问作为循环一部分的最后几个字节;因为它们不构成"完整的";int
对象,这不是一件坏事。
set1
和set2
是指向整数的指针。您尝试处理字节。这是不对的。
尝试描绘内存布局:
malloc(1)
将分配一个字节,即8个比特。int *set1
声明一个指向int的指针,int通常是4个字节,即32位。
char
通常表示1个字节,即8个比特。那么为什么不采用char *set1
和char *set2
呢?