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

Bitwise or between 2 sets of bytes in c

假设我们有

int *set1 = malloc(n);

int *set2 = malloc(n);

然后我们用数据填充这两个集合。我的目标是按位或在 set1 和 set2 之间执行。

我想我不能做类似

的事情
for (i=0; i<n; i++) {
    set1[i] = set1[i] | set2[i];
}

因为 n 是字节数而不是数组的单元格数。

有什么想法吗?提前致谢

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

试着想象一下内存布局:

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

一个char一般表示1个字节,即8位。那么为什么不这样做呢,char *set1char *set2 ?

size_t elements = n / sizeof *set; 

for ( i = 0; i < elements; i++ )
  set1[i] = set1[i] | set2[i];

备注:

  • 表达式 *set1 的类型为 int;因此表达式 sizeof *set1sizeof (int) 相同。我更喜欢使用这样的表达式而不是显式命名类型;如果 set1 的类型需要更改,它会让事情变得更容易。

  • 如果n是字节数,n / sizeof *set1是数组中int个元素的个数。请记住,在 C 中整数除法会产生一个整数结果 - 如果 n 不是 sizeof (int) 的倍数,那么结果将是 n / sizeof (int) 的底数 - 即 7/4 == 111/4 == 2,等等。这也意味着您不会在该循环中访问最后几个字节;因为它们没有构成一个“完整的”int 对象,所以这不是一件坏事。