如何在C ++中存储这些位,如何在Java中表示类似的功能

时间:2011-05-09 06:10:29

标签: java c++ bits

我有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 ++中避免哪些? 感谢

2 个答案:

答案 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的位置。