关于位移的问题,解惑马上给分!!!

oswicer 2005-04-12 04:18:33
a >> 32 = a; a 为int型

上面这个式子我用程序验证,屡试不爽,但是有一个很大的疑惑

按照java的理论讲: >> 也就是有符号右移,移动时 最高位和原符号位相同,也就是说如果是正数,最高位始终是补1,负数始终补0
那么一个负的整数,向右移动32位,肯定最后的结果,所有32位都是0啊,怎么会还是自己呢,但是用程序测试,的确应验
-33 >> 32 = -33;

为什么,为什么?已经想晕了
...全文
90 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
FBugFramework 2005-04-12
  • 打赏
  • 举报
回复
也不给我一些。。

小气叭啦的。
FBugFramework 2005-04-12
  • 打赏
  • 举报
回复

16 10 2
0x1f 31 11111

原来 a>>(n&0x1f) 就是a>>(n%32) 哦。。这么妙啊。

不是吧。。我测试了:-33 >> 33 后也是 -33 啊。。
oswicer 2005-04-12
  • 打赏
  • 举报
回复
这么高深,pf,pf
分都给你了!!
kingfish 2005-04-12
  • 打赏
  • 举报
回复
//我觉得a>>n是按a>>(n%32)进行处理的. (猜得)
//主要要看ishr指令是如何处理的

看来我猜对了.

刚查了Inside JVM, 右移指令 ishr
如a>>n
所移位数由n的最低5位决定, 相当a>>(n&0x1f) 也就是a>>(n%32)
===========
oswicer 2005-04-12
  • 打赏
  • 举报
回复
FBug(花知)
好象是我错了,那问题还是一样的,正数补0的话,挪了32位也就全变成0了

但是我并没有移动32位,我只是拿-33做个例子罢了
-50 >> 32 = -50 ;是一样的


没有人真正明白么,还是不懂啊
kingfish 2005-04-12
  • 打赏
  • 举报
回复
主要要看ishr指令是如何处理的
kingfish 2005-04-12
  • 打赏
  • 举报
回复
我觉得a>>n是按a>>(n%32)进行处理的. (猜得)
kingfish 2005-04-12
  • 打赏
  • 举报
回复
我觉得a>>n是按a>>(n%32)进行处理的. (猜得)
FBugFramework 2005-04-12
  • 打赏
  • 举报
回复
千万不要晕。
要是晕了的话就再也想不出来了。

毛zx常这样告戒我。
FBugFramework 2005-04-12
  • 打赏
  • 举报
回复
不知道啊。
int型的只有32位啊。

你移动了33位。明显不对。
最多移动32位啊否则没意义了。 -33 >> 31 的结果就是 -1。。这是一定的
FBugFramework 2005-04-12
  • 打赏
  • 举报
回复
正数补0,负数补1啊。

62,614

社区成员

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

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