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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 空心祭 中级黑马   /  2014-2-20 19:03  /  1566 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

正数的位移运算可以用2的次幂的方式总结规律方便与计算答案
那么负数的二进制表现形式直接位移出来的值有没有什么规律可言,有没有什么简便的算法?
比如-6 右移一位的答案是-3   右移两位的答案是-2 右移三位的答案是-1 后面就全是-1了 那么负数的二进制位移运算有规律可循么?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

2 个回复

倒序浏览
当然有了int a = -32;a>>2,最后a的值是-8.   楼主记住任何一个整数右移几位,只跟这个整数有效值除以2的几次方有关,最后得出来的数再加上正或负
举例数是32,右移一次就是除以2的一次方,值为16;右移两位除以2的2次方,值为8
           -32,右移一次就是32除以2的一次方,最后带上负号,值为-16;右移两位就是32除以2的2次方值,再把负号带上,值为-8
所以一个整数a,右移n位就是a/(2^n),那个2和n之间就是次方的意思

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
楼主,首先你把负数的二进制和正数的二进制就弄混了,比如你提到的-6,你所谓的右移一位为-3,右移两位为-2这个结论本身就是错误的,你把-6的二进制当做了10000110,而其实-6的二进制是11111010,右移移位确实结果为-3,但是右移2为 结果不可能为2,你可以手动画图实验,也可能直接用公式验证6除以2的2次方即6除以4结果应该为1。对于负数右移的规律本身就来源于数学,只是用代码来表现而已。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

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