Java 短时间左移产生零
在Java中,“byte”是8位的,“short”是16位的,我相信这应该是正确的--Java 短时间左移产生零,java,bit-manipulation,bit-shift,Java,Bit Manipulation,Bit Shift,在Java中,“byte”是8位的,“short”是16位的,我相信这应该是正确的-- byte[]packet=reader.readPacket(); 短sh; sh=(短)数据包[1]//数据包[1]包含“0xff” sh您所做的是将初始值向左移动: 0000 0000 1111 1111 <<=8 1111 1111 0000 0000 因此,最终结果为0。您所做的是将初始值向左移动: 0000 0000 1111 1111 <<=8 1111
byte[]packet=reader.readPacket();
短sh;
sh=(短)数据包[1]//数据包[1]包含“0xff”
sh您所做的是将初始值向左移动:
0000 0000 1111 1111
<<=8
1111 1111 0000 0000
因此,最终结果为0。您所做的是将初始值向左移动:
0000 0000 1111 1111
<<=8
1111 1111 0000 0000
因此,您的最终结果为0。逐步完成以下步骤:
sh = (short)0xff; //Since you said that packet[1] holds '0xff'
所以现在sh=0x00ff
。接下来,考虑移位<代码> Sh逐步进行:
sh = (short)0xff; //Since you said that packet[1] holds '0xff'
所以现在sh=0x00ff
。其次,考虑移位<代码> Sh代码先移左8位。因此,将最右边的8位设置为0
然后用0xFF和它进行比较,0xFF保留了最多8位0
所以你的最终结果都是0
附加注释:避免使用Java的缩写是一个很好的做法,因为Java类型将int以下的所有内容都转换为int。如果您添加了额外的信息,那么就很容易准确地发现您试图实现的逻辑需要做什么。代码首先左移8位。因此,将最右边的8位设置为0
然后用0xFF和它进行比较,0xFF保留了最多8位0
所以你的最终结果都是0
附加注释:避免使用Java的缩写是一个很好的做法,因为Java类型将int以下的所有内容都转换为int。如果您添加了额外的信息,那么就很容易发现您试图实现的逻辑需要做什么。您认为如何sh&=0xFF
does?也许应该是0xFFFF?当你使用sh&=0xFF当你使用时,OP在他的评论中说0xff
是初始值。11010011 110011
只是作为一个通用示例值吗?啊,我没有注意那个评论。这只是一个例子;不管初始值是多少,他都会得到相同的结果。我同意,答案是一样的。只是检查一下我的十六进制没有生锈:)OP在他的评论中说,0xff
是初始值。11010011 110011
只是作为一个通用示例值吗?啊,我没有注意那个评论。这只是一个例子;不管初始值是多少,他都会得到相同的结果。我同意,答案是一样的。只是检查一下我的六边形没有生锈:)