0

我在 C++ 中有:

typedef struct _msk {
char    abc[4];
//some more variables
}

_msk mr;

if (some condition >= 70) {
   mr.abc[0] |= 0xC0;   //C0 in binary 11000000
   mr.abc[1] |= 0x20;   //20 in binary   100000
   mr.abc[2] |= 0x44;   //44 in binary  1000100
}

这里 OR 操作正在进行,之后将存储该值。所以在内存中是不是像 (0th)11000000(1st)100000(2nd)1000100 因为它们在数组中?[4]中实际可以存储多少位(总共0+1+2+3+4)。

在 Java 中:

private BitSet abc = new BitSet(40);

如果需要更新或修改位,我们可以使用 bitset 类提供的 set 或 get 方法。在java中,如果我们需要进行OR运算,我们需要在后缀中添加0以获得相同的结果。我们可以在 C++ 中避免哪些?谢谢

4

2 回答 2

1

所以在内存中是不是像 (0th)11000000(1st)100000(2nd)1000100 因为它们在数组中?

几乎:(0th)11000000(1st)00100000(2nd)01000100

[4]中实际可以存储多少位(总共0+1+2+3+4)。

不是 0+...+4,而是 0+...+3,4 个大小为 8 位的字符 = 32 位(索引:0、1、2、3)

而且您仍然可以在 Java 中使用按位运算符 - 不完全确定您对 Java 代码的要求是什么?

于 2011-05-09T06:20:17.617 回答
1

由于您使用的是 |=,因此您实际上是在执行 mr.abc[0] = mr.abc[0] | 0xC0;

所以这意味着结果取决于 mr.abc[0] 的原始值,它可能是也可能不是 0。

char(1 字节)中也有 8 位。所以数组中有 4 个元素,总共有 32 位。

Java 对所有按位运算使用完全相同的符号。我不确定您将使用 BitSet 去哪里。

于 2011-05-09T06:24:23.543 回答