Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 短时间左移产生零_Java_Bit Manipulation_Bit Shift - Fatal编程技术网

Java 短时间左移产生零

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

在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 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
只是作为一个通用示例值吗?啊,我没有注意那个评论。这只是一个例子;不管初始值是多少,他都会得到相同的结果。我同意,答案是一样的。只是检查一下我的六边形没有生锈:)