2015-09-14 23 views
3

比方说,我在java中下面的代码在Java中与字节进行OR操作的问题?

byte t = (byte) 0b10001000; 
byte z = 0b00000000; 
z = (byte) (t|z); 

你会认为输出是10001000,但它最终的字符串表示是-1111000, - 号是当然的第一1,使得它11111000.如果我做相同的代码,但最后一位在Z中作为1,例如00000001和我执行相同的操作,我得到-1110111或11110111.我认为这是由于负符号字节t的转换问题。有什么办法可以避免这种情况?有没有什么办法让01000000在OR操作中的工作与01000000相同?

回答

3

Java没有无符号类型,所以当你使用二进制notaion并设置标志,你希望;-)

为了模拟,你需要在接下来的大小工作无符号类型有点事情不会去向上。

+0

你能提供一个例子吗?有没有办法使用按位运算正确处理第8位? – Bigsuga

+0

只需将您的类型更改为int并删除字节转换。 - 很多谷歌的例子(和S.O.) – John3136

+0

太棒了,谢谢! – Bigsuga