位移问题?

ifirefox 2006-11-09 11:01:18
int x = 1;
x = x<<31;
x = x>>31;

结果为什么是0?
特别是最后右移部分是怎么做的?
...全文
282 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelleecash 2006-11-10
  • 打赏
  • 举报
回复
感兴趣的话看看微机原理一类的书
angelleecash 2006-11-10
  • 打赏
  • 举报
回复
移位操作:
左移 最低位补零
右移 最高位补零
bush_80_0 2006-11-10
  • 打赏
  • 举报
回复
就是0
dragon_up 2006-11-10
  • 打赏
  • 举报
回复
我也是一个菜鸟,以后共同学习哈!
我想应该是这样的,先左移,左移一次表示乘以2,左移31位表示乘以2的31次方,超出了机器数的表示范围,故应为一个负数.再右移31位变成了负1.
如果先右移,1在机器里表示为00000000000000000000000000000001,右移一次就变为0了,移31位就是去掉现有的后31们,在前边加31个0,结果还是为0,然后再左移,0左移N次还是为0.
接分!!!
buyaowen 2006-11-10
  • 打赏
  • 举报
回复
hbwhwang(catmiw的ID已经停用,现在用这个)的正解
hbwhwang 2006-11-10
  • 打赏
  • 举报
回复
最后不是0,应该是-1才对

int x=1; 0000,0000 0000,0000 0000,0000 0000,0001
x=x<<31; 1000,0000 0000,0000 0000,0000 0000,0000
x=x>>31; 1111,1111 1111,1111 1111,1111 1111,1111
解释:
<<是往左边移,后面补0
>>是往右边移,前面补符号位

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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