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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜天伟 中级黑马   /  2013-7-6 16:52  /  1233 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 巩建 于 2013-7-6 18:15 编辑

刚刚看毕老师视频第二天位运算关于>>右移符号,毕老师总结的规律:其实就是除以2的移动位数次幂.但是我试了一下负数比如-6>>2得到的却是-2而不是-1.而按照毕老师总结的规律算的话结果就是-1.这是怎么回事?还是说毕老师的规律不适用于负数?

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览
杜天伟 来自手机 中级黑马 2013-7-6 16:53:46
沙发
手机码字有点乱
回复 使用道具 举报
负数是以补码的形式存的,移的是负数的补码。
回复 使用道具 举报
本帖最后由 denghui1010 于 2013-7-6 17:38 编辑

有符号的位移操作
11111111 11111111 11111111 11111010     -6在计算机中的表示
11111111 11111111 11111111 11111110     右移两位,结果为负数
这个值是多少呢,看看它对应的正数是多少,再加上负号就是了,于是进行先减1再求反操作(逆向)
1111111111 11111111 11111111 111101      减1之后
0000000000 00000000 00000000 000010      取反=2
所以值=-2

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
杜天伟 来自手机 中级黑马 2013-7-6 17:40:47
报纸
denghui1010 发表于 2013-7-6 17:37  有符号的位移操作  11111111 11111111 11111111 11111010 -6在计算机中的表示  11111111 11111111 111111 ...

这个我明白,我想问的是毕老师总结的这个运算规律是不是对负数不适用呢?还是怎么回事
回复 使用道具 举报
如果对负数进行>>右移时,当能够被2的幂整除时是满足毕老师的规律的。负数右移时要注意,符号位的1不参与移位;在移位中当移出的数字是1时,则最后结果应加1;当移出去的数字是0时,则最后结果不加1。所以,-6>>2的结果是-2,而不是-1.

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 很给力!

查看全部评分

回复 使用道具 举报
杜天伟 发表于 2013-7-6 17:40
这个我明白,我想问的是毕老师总结的这个运算规律是不是对负数不适用呢?还是怎么回事 ...

整除的时候可以,不整除的时候不可以
回复 使用道具 举报
杜天伟 来自手机 中级黑马 2013-7-6 17:57:55
8#
所以正数右移除以2除不尽小数舍去,负数除不尽要进1喽?
回复 使用道具 举报
杜天伟 发表于 2013-7-6 17:57
所以正数右移除以2除不尽小数舍去,负数除不尽要进1喽?

对,就是取小于结果并最接近结果的那个整数
回复 使用道具 举报
十进制负数转换成二进制时,首先将负数转换为对应的原码(去 - 号后的整数转化为二进制),然后将原码的每一位做取反操作得到反码。(取反操作:0变为1,1变为0),最后将反码+1得到补码就是所求的二进制。当然这里我们都是以有二进制符号数计算的。
二进制(符号位为1)转换为十进制则由上面的方法反过来就好。
楼主的-6二进制右移2位为  11111111 11111111 1111111 11111010 >> 2  为  11111111 11111111 11111111 11111110  由于符号位为(-)依上边十进制转二进制的方法反过来转换正好是 -2。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马