Java中右移运算

Java中右移运算,请给出详细过程,谢谢!
-1>>2 = -1
-5>>2=2
-5>>>2=1073741822

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

操作数每右移一位,相当于该数除以2。

注:正数的原码,反码,补码一致;负数的反码是除去符号位外其余取反,负数补码是除去符号位外其余取反,末尾加1。 (二进制最左边一位是符号位)


带符号右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。


无符号右移运算符(>>>)

>>>运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃


-1>>2 = -1   

-1:   原码:1000 0001  反码:1111 1110  补码:1111 1111

右移2位:1111 1111    ( 用补码操作,并用 1  补齐左边位)

再找反码:1000 0000    ( 除去左边符号位,其余取反 )

再找原码:1000 0001 = -1  ( 还是将反码末尾加1 )


-5>>2=-2

-5:   原码:1000 0101  反码:1111 1010  补码:1111 1011

右移2位:1111 1110    ( 用补码操作,并用 1  补齐左边位)

再找反码:1000 0001    ( 除去左边符号位,其余取反 )

再找原码:1000 0010 = -2  ( 还是将反码末尾加1 )


-5>>>2=1073741822

-5: 

原码:1111 1111 1111 1111 1111 1111 1111 0101

反码:1111 1111 1111 1111 1111 1111 1111 1010

补码:1111 1111 1111 1111 1111 1111 1111 1011

右移2位:0011 1111 1111 1111 1111 1111 1111 1110=1073741822


温馨提示:内容为网友见解,仅供参考
无其他回答

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

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

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

关于Java的算术右移运算符
右移一位: 1111 1101 上面的结果是-3的补码,和实际不符(-5\/2 = -2)加上修正值: 1111 1011 + 2的一次方减1 = 1111 1011 + 1 = 1111 1100 然后再右移一位:1111 1110 <= -2的补码!

java中右移运算符和无符号右移运算符的区别
就是(011)就是3,所以int a=3;也可看成是除以二,如果左操作数是奇数就看做(a-1)÷2,是偶数就是 a÷ 2 右移位运算就是将左操作数的比特位向右移动第二个操作数指定的位数,在二进制中,首位是用来表示正负的,若右移运算符的第一个操作数是正数,就填充0,是负数就填充1;

java中位移操作和乘法的区别
>> : 右移运算符,num >> 1,相当于num除以2 >>> : 无符号右移,忽略符号位,空位都以0补齐 对于:>>> 无符号右移,忽略符号位,空位都以0补齐 value >>> num -- num 指定要移位值value 移动的位数。无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无...

Java中“a>>b”是什么意思?
<< 和>>是java中的移位运算符,<<是左移位,>>是右移位,因为数据存储是二进制的所以左移1相当于乘以2的1次方,右移相当于乘以2的-1次方,例如 << : 左移运算符,num << 1,相当于num乘以2,num << 2,相当于num乘以2再乘以2 >> : 右移运算符,num >> 1,相当于num除以...

Java中,位运算符>>,右移时左边何时补0,何时补1
此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情...

java(byte)>>>时怎么运算的
右移>>:向右移位,符号后面的数字是移了多少位,移的位用符号位补齐,例如01111111右移一位后变为00111111,而10000000右移一位后变成11000000,因为符号位是1。(byte)0xa2>>>2 = 2 (byte)0x72>>>2 = 28 (int)0xa2>>>2 =28 (错误)(byte)0x72 是十进制的114, 114转换成二进制是 ...

关于移位
“ < <”, “> > ”, “> > > ”在Java中是左移、有符号右移和无符号右移运算符。位移运算符只对int值进行操作,如果不是int,编译器会报错。在Java中,一个int的长度始终是32bit,也就是4个字节。比如t> > > n的含义就是把整数t右移n位,高位补上零。所以如果t是个负数,最...

相似回答