Java中,位运算符>>,右移时左边何时补0,何时补1

那为什么11010110>>2=11110101,而不是等于00110101呢?

在Thinking in Java第三章中的一段话:

移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-29
右移动运算符:
把操作数向右移动,移动的位个数同样由右操作数指定。注意:面对带正负号的数,会采用符号扩展,如果原值是正数,则高位补上0;如果原值是负数,高位补1。本回答被提问者采纳

Java中,位运算符>>,右移时左边何时补0,何时补1
左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种...

Java中,位运算符>>,右移时左边何时补0,何
二进制00000010向左移动三位变成了00010,超出了8位,相当于删除前三个字符位,删除之后又由于不满足8位,后面填0,变成00010000 00010000(二进制) = 16(十进制)

Java 中“>>”和“>>>”有什么区别?
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。表达式为:result = exp1 >> exp2;result = exp2 >>> exp2;表示把数exp1向右移动exp2位。例如:res = 20 >> 2;2...

Java中的位移运算中的>>(逻辑右移)和>>>(算术右移)的区别?
逻辑右移是将各位依次右移指定位数,然后在左侧补0,算术右移是将各位依次右移指定位数,然后在左侧用原符号位补齐

JAVA中的“>>”和“>>>”运算符
1、>>:右移运算符,num >> 1,相当于num除以2。按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。符号位不变。如:-1在32位二进制中表示为:11111111 11111111 11111111 11111111 -1>>1:按位右移,符号位不变,仍旧得到11111111 11111111 ...

java中逻辑右移">>>"算术右移">>"的区别?
>>右移运算符,有符号。右边超出截掉,左边补上符号位 >>>右移运算符,无符号,左边补0 算术右移 顾名思义 算术嘛 当然要带符号了 所以要补上符号位 负的就填1 正的就填0 那个逻辑右移 直接补上0就ok

Java中,位运算符,右移时左边何时补0,何时补1
没有这种说法, 计算的时候就会补, java中位运行只针对整数类型, 整数类型是基础数据类型, 不是引用类型, 计算的结果其实是新的内存

求:JAVA中常用位运算符及其用法详解
即运算结果为z等于二进制数01000000。位或、位非、位异或的运算方法类同。(2)右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。例如...

Java中右移运算
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。无符号右移运算符(>>>)>>>运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃 -1>>2 = -1 -1: 原码:1000 0001 反码:1111 1110 补码:1111...

JAVA里面的位运算符>>,<<,>>>是什么意思,请举个列子具体说明一下?_百 ...
>>>无符号右移 (n>>>2 将整型值无符号右移2位 ) 在32位系统中任何数左移(右移)32位还是它本身 例如:�6�1a=a<<2将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,即十进制数60(为简单起见,我们用8位二进制数表示十进制...

相似回答