我有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
}
此处或操作将继续运行,之后将存储该值。 那么在内存中它是否像(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 ++中避免哪些? 感谢
答案 0 :(得分:1)
所以在记忆中它就像 (第0)11000000(第一)100000(第2次)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代码的要求是什么?
答案 1 :(得分:1)
由于你使用的是|,你实际上是在做mr.abc [0] = mr.abc [0] |将0xC0;
所以这意味着结果取决于mr.abc [0]的原始值,可能是也可能不是0.
char中还有8位(1字节)..因此,阵列中有4个元素,总共有32位。
Java对所有按位运算使用完全相同的表示法。我不确定你在BitSet的位置。