Java中右移运算

发布网友 发布时间:2022-03-30 06:03

我来回答

1个回答

热心网友 时间:2022-03-30 07:33

将一个数的各二进制位全部右移若干位,正数左补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


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com