java >>>无符号运算 负数具体算法求解

java的爪哇 2014-02-16 11:13:48
比如:
int bt=-20;
//bt>>2= 1000 0000 0000 0000 0000 0000 0000 0101
System.out.println(">>:"+(bt>>2));
/**
* 无符号右移
* 它使用了“零扩展”:无论正负,都在高位插入0
* 20=10100
* 用补码表示,1000 0000 0000 0000 0000 0000 0001 0100
* >>>2= 0010 0000 0000 0000 0000 0000 0000 0101
*
* 1*2的30次方=1073741824 +-5
* =1073741819
*/
//bt>>>2= 0010 0000 0000 0000 0000 0000 0000 0101
System.out.println(">>>:"+(bt>>>2));

这里的>>>2输出结果为1073741819 那也就是1*2的30次方=1073741824 +-5 的结果,
问题:如果把结果二进制转十进制的话不应该再+-5呀,这个—5是怎么得出来的呢,最高位不是已经补0了吗,那要是还是按-数算,那结果怎么没有负数呢,请高手指点,
...全文
81 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧