Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 Shift - Fatal编程技术网

Java 为什么移位运算符中的结果为负数>&燃气轮机;与正常的划分不同吗?

Java 为什么移位运算符中的结果为负数>&燃气轮机;与正常的划分不同吗?,java,bit-shift,Java,Bit Shift,我试图理解轮班操作员的概念, 我正在测试以下代码: 15 >> 2; - 15 >> 2 第一条语句的结果是3,即15/4=3 但是第二个语句的结果是-4 我知道-15的二进制数是11110001,当我们向右移动2时,我们得到11111100,这是-4。但是我不明白为什么结果与简单除法不同,简单除法是-15/4=-3而不是-4 请告诉我为什么会发生这种情况?移位运算符通过发言而不是截断来删除任何数学分数。报告指出: n>>s的值是带符号扩展的n右移s位位置。结

我试图理解轮班操作员的概念, 我正在测试以下代码:

15 >> 2;    
- 15 >> 2 
第一条语句的结果是3,即15/4=3 但是第二个语句的结果是-4

我知道-15的二进制数是11110001,当我们向右移动2时,我们得到11111100,这是-4。但是我不明白为什么结果与简单除法不同,简单除法是-15/4=-3而不是-4


请告诉我为什么会发生这种情况?

移位运算符通过发言而不是截断来删除任何数学分数。报告指出:

n>>s
的值是带符号扩展的
n
右移
s
位位置。结果值为
地板(n/2s)
。对于
n
的非负值,这相当于将整数除法运算符
/
计算的整数除法,以2的幂
s
截断

-3.75
的下限是
-4
,而截断则会产生
-3

当值右移时,位会丢失,因为它们被移离值的“末端”。这就是负责地板操作的原因

-15: 11110001
 -4: 11111100 // The rightmost 1 bit above is lost, resulting in what looks like the floor function.
Java用来表示负数。

在2的补码有符号二进制数上右移n位可以将其除以2n,但它总是向下舍入(朝向负无穷大)。这与有符号整数除法(向0进位)中通常采用的进位方式不同。

感谢您的澄清