0
A
回答
0
位运算是你在找什么。我相信有更高效的实现,但我只是在这个答案中说明了一点。
我要去代表使用字节在Java中位浪费空间:
//11010101 has a value of -43 because bytes are signed by Java
//MSB
byte bit1 = 1;
byte bit2 = 1;
byte bit3 = 0;
byte bit4 = 1;
byte bit5 = 0;
byte bit6 = 1;
byte bit7 = 0;
byte bit8 = 1;
//LSB
即使我只设置为0或1至我字节的值,Java是使用8位来存储他们。这意味着,在存储器中,我的bit1
值占用的空间1个字节(2个半位元):
0 0 0 0 0 0 0 1
我可以“移”通过使用按位移位运算该值达到在该空间中。有两种口味,上下。我将通过一个换档我的位向上:
bit1 << 1;
即转移的整数bit1
的位向上通过一个(加入零到在存储器中的最低位)像这样,
0 0 0 0 0 0 1 0
的bit1
的十进制值现在是2!我们现在有了一个工具,我们需要将一个值转移到它在字节中的位置,我们只需要移动我们的每个位,并使用“|”将它们逐位“或”运营商:
byte myByte = 0;
myByte = (byte)((bit1 << 8) | (bit2 << 7) | (bit3 << 6) | (bit4 << 5) | (bit5 << 4) | (bit6 << 3) | (bit7 << 2) | (bit8 << 1) | bit8);
我一定要投的变化和按位OR值的结果为byte确保我的结果的正确格式。 myByte
现在看起来是这样的记忆:
1 1 0 1 0 1 0 1
在小数的这个字节的值是-43,因为字节在Java中签署。你可以用2的赞美来手工检查。
现在,要设置您的字节的第一位,您只需使用按位与与面具!
myByte = (byte)(myByte & 0b11111110);
myByte
的十进制值现在是-44。
0
需要先检查第n位为1或0,如果它是1,那么它变成0。
if(number & (1 << (n-1)){
number &= ~(1 << (n-1));
0
在java中,字节是签名型,所以其值可以是间-128和127.数据以二进制补码形式存储,这意味着第一个(最重要的)位/数字指示数字是负数(1)还是非负数(0)。欲了解更多信息,请阅读此:https://en.wikipedia.org/wiki/Two%27s_complement
所以,你可以
byte myByte = 111;
myByte = (byte)(myByte + 128);
第二种方法是使用XOR操作只需添加128到它的第一位。此代码应该这样做:
byte myByte = 111;
myByte = myByte^0x80;
相关问题
- 1. Numpy:检查数组中的某个位是否设置为1或0?
- 2. 甚至设置为0,奇数设置为1
- 3. 转换设置为numpy 0-1数组?
- 4. 如何将最后(最低)0位设置为1
- 5. PHP PDO错误,值被设置为0
- 6. 检查不为0的小数位数
- 7. 检查某位置的位是否为1
- 8. 更改GPS位置为Android
- 9. 检查/更改背景位置
- 10. angularjs:检查url位置更改
- 11. 为什么!x将1和0更改为true/false
- 12. 更改位置设置
- 13. PHP更新设置全部为0,但对于某些编号为1
- 14. 将基于插入的设置设置为1到0-1的关系表
- 15. Java,设置日期为0/0/0
- 16. 位未被设置为一些golang
- 17. 为什么〜0 >> 1不移位?
- 18. PHP:检查是否为0?
- 19. 如何检查数据库列中是否设置为1
- 20. 的Java:更改二进制数位的0比1和1比0的
- 21. MySQL查询将一个值设置为1,将所有其他值设置为0
- 22. 将ToolStripSplitButton.DropDownButtonWidth设置为0
- 23. UpdateParameters始终设置为0
- 24. tf.ones_like(张量)设置为0
- 25. 更改查看位置
- 26. 更改MOV设置不变0
- 27. C:在O中设置整数的第i位为1(1)
- 28. Android为什么自动更改位置?
- 29. css更改后台位置为:visited
- 30. 检查存储为位串的字节是否设置在给定位置
[本文可能会帮助您在正确的方向。](http://stackoverflow.com/q/12015598/2650847) –