java负数右移(java负数移位运算)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享java负数右移的知识,其中也会对java负数移位运算进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
Java中右移运算
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
注:正数的原码,反码,补码一致;负数的反码是除去符号位外其余取反,负数补码是除去符号位外其余取反,末尾加1。 (二进制最左边一位是符号位)
带符号右移运算符()
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
无符号右移运算符()
运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃
-12 = -1
-1: 原码:1000 0001 反码:1111 1110 补码:1111 1111
右移2位:1111 1111 ( 用补码操作,并用 1 补齐左边位)
再找反码:1000 0000 ( 除去左边符号位,其余取反 )
再找原码:1000 0001 = -1 ( 还是将反码末尾加1 )
-52=-2
-5: 原码:1000 0101 反码:1111 1010 补码:1111 1011
右移2位:1111 1110 ( 用补码操作,并用 1 补齐左边位)
再找反码:1000 0001 ( 除去左边符号位,其余取反 )
再找原码:1000 0010 = -2 ( 还是将反码末尾加1 )
-52=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中-5>>2等于-1是为什么?
在数据不溢出的情况下,1相当于乘以2,1相当于除以2。-52就相当于-5除以2再除以2,这是个整型,所以-5/2得-2,再除以2就得-1了。当然如果转为二进制再平移更容易理解。
求java大神告诉我 java中无符号左移或右移 是怎么回事呢? 特别是负数是怎么回事?谢谢了
有符号就带符号、没符号就补0。
转成2进制,或者自己用筷子摆几下,就清楚了。
借个别人写好的了
右移
System.out.println(-31);结果是-2,为什么会是-2呢?下面我们来看一下.System.out.println(Integer.toHexString(-3));得到-3的16进制为fffffffd(此为-3的补码,计算机中负数用补码表示).转换成2进制为
1111 1111 1111 1111 1111 1111 1111 1101
右移一位为
1111 1111 1111 1111 1111 1111 1111 1110
,显而易见此为-2补码.
左移
System.out.println(-31);左移相对来说比较简单.1111 1111 1111 1111 1111 1111 1111 1101左移一位为1111 1111 1111 1111 1111 1111 1111 1010,其为-6的补码.
无符号右移System.out.println(-31);1111 1111 1111 1111 1111 1111 1111 1101无符号右移,高位补0,01111 1111 1111 1111 1111 1111 1111 1110,其为2147483646的原码.
关于java负数右移和java负数移位运算的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
