A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏儒日 中级黑马   /  2012-7-2 13:26  /  2116 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大侠,对于int型整数的移位运算,为什么一个数a>>32位后的结果还是a啊?如果按照移位运算的定义来看,不是应该在空位上补1或者0么?求各位大神指教!不甚感激!!

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
因为只要是>>32的倍数,都会是原来的数。因为int整型是4个八位,也就是32个二进制,所以移动32的倍数还是原来的数
回复 使用道具 举报
学 习 了
回复 使用道具 举报
因为int型是四个字节,一个字节八位,你移位32,肯定还是原来的数啊
回复 使用道具 举报
a>>b  如果a是int类型的话 那么b就取地5位  那么a>>32  32的低5位为00000 所以是a>>0结果为a  a>>-1的话 取-1的低5位  -1的低5位是31 所以结果是a>>31
如果a是long型  a>>b b取低6位  a>>32的低6位还是32 所以结果为a>>32  如果是a>>64  64的低6为是0所以结果为a>>0  等于a  a>>-1  -1的低6位是63 所以结果a>>64
结论  int byte char进行位移运算  a>>n;  结果a>>n&0x1f    如果a是long进行位移  a>>n; 结果a>>n & 0x3f;
回复 使用道具 举报
因为int整形数是4个字节共有32位,a>>32移动了32位回到原来的数
回复 使用道具 举报
因为int整形数是4个字节共有32位,a>>32移动了32位回到原来的数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马