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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马--马超 初级黑马   /  2012-7-24 16:41  /  1878 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 cookie110 于 2012-7-24 18:25 编辑

问题:
1.为什么二进制只能对INT型整数进行移位?
2.为什么对于整数0无法进行移位;
3.为什么-1无法向右移位

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
二进制数在计算机里边存储的情况是这样的
比如6
00000000  00000000 00000000 00000110
这里的八个数字为一个字节,一个字节由八个毕克伟组成
二进制的实质是满2进1所以不会有2数组出现
0呢本来就在计算机中以00000000  00000000 00000000 00000000存在
所以不会再移位了怎么移都是0
而-1也是如此在计算机中以11111111 11111111  11111111  11111111存在
所以不能再向右移位了前边怎么移都的用1补位所以怎么弄都是-1
回复 使用道具 举报
首先,移位操作不只是对应于int型收据的
对于0不是不能操作
即便是操作每一位都是0左移右移还都是0
-1不是不能移位,而是关系到移位的原理,
-1在内存中的补码就是
1111-1111  1111-1111  1111-1111  1111-1111
右移的话因为他是负数会默认在左边插入1
所以无论怎么移位都还是
1111-1111  1111-1111  1111-1111  1111-1111
左移位运算符( < <)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。
“有符号”右移位运算符(> > )则将运算符左边的运算对象向右移动运算符右侧指定的位数。“
有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。
Java也添加了一种“无符号”右移位运算符(> > > ),它使用了“零扩展”:无论正负,都在高位插入0。
希望对楼主有所帮助。。。。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
一、能够进行按位操作的有都是整型数值,有int,char,byte,short,long
        移位运算符有<<,>>,>>>
        对于字节数小于int的整型,在进行操作时一律转为整型:
       例如:
           byte a = 1;
           byte b = a>>1;会报错,因为a>>1时,已经被转成了整型,
       其中,char,byte,short的正数转整型时,高位补0,在byte和short中的负数转整型时,高位补1.
       另外,long也可以进行移位,所以你说的“二进制只能对INT型整数进行移位”就无从谈起了。
二、这点楼上已经说清楚了。
三、向右位移有两种方式:>>和>>>
        >>使用了符号扩展,即:若符号为正,在最高位插入0,否则,在最高位插入1,所以-1>>n都等于-1,
     因为-1的二进制表示为11111111 11111111  11111111  11111111,插1后不变
>>>不适用符号扩展,一律在高位插0,所以-1>>>1就等于2147483647了,发生变化了

希望对你有帮助......


评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
几位回答的很精彩,谢谢!
回复 使用道具 举报
整型数值都能移位,不只是int型;
0无论左移还是右移都用0补齐,最终还是0;
-1右移最高位用1补齐,最终还是-1。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马