黑马程序员技术交流社区

标题: 负数二进制位移运算 [打印本页]

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

作者: 迦罗叶    时间: 2014-2-20 21:42
当然有了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之间就是次方的意思

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2