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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田峻菘 中级黑马   /  2014-10-24 23:21  /  1071 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么System.out.println(-6>>2)  // 结果输出-2
怎么不是-1,
不是按照<<或>> n位就应该*2的n次幂或/2的n次幂么?
系统运算中是按32位二进制补码运算,有符号右移也不会影响到-6吧?
求解释,谢谢!!

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

4 个回复

倒序浏览
自己用二进制补码算过,结果是-2,难道<<,>>只适用于正整数么?
回复 使用道具 举报
负数只能无符号右移>>>吧 因为负数的最高位是1 所以移动的时候不能拿0补位 具体再找别的老师问问吧,我一直这么认为的,也不确定对不对
回复 使用道具 举报
-6二进制补码为:11111111 11111111 11111111 11111010 右移两位得到:11111111 11111111 11111111 11111110;即为-2.所谓的左移乘以2的倍数右移除以2的倍数是在整除的情况下,如果没有整除那就是另当别论了
回复 使用道具 举报
戏言丶 发表于 2014-10-25 07:21
-6二进制补码为:11111111 11111111 11111111 11111010 右移两位得到:11111111 11111111 11111111 1111111 ...

谢谢,明白了,负数左移没问题,右移若不能整除就不能按/2的n次幂算了:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马