按位或在c中的2组字节之间



假设我们有

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 == 111/4 == 2等。这也意味着你不会访问作为循环一部分的最后几个字节;因为它们不构成"完整的";int对象,这不是一件坏事。

set1set2是指向整数的指针。您尝试处理字节。这是不对的。

尝试描绘内存布局:

malloc(1)将分配一个字节,即8个比特。int *set1声明一个指向int的指针,int通常是4个字节,即32位。

char通常表示1个字节,即8个比特。那么为什么不采用char *set1char *set2呢?

最新更新