一直对位移运算符比较混乱,想好好的总结一下位运算符的计算规律,现在就算做一个了断吧,全是个人之言,不保证正确无误,有错误请各位看客指出:
>>:右移运算符,右移一次就相当于除以2,因此a>>n就相当于a/2n ,如果a的初始值是奇数,可以先减一之后再进行剩下的运算。它的运算原理是:当操作数为正数时,高位以0填补;当为负数时,高位以1填补。
注:a经过位移运算之后,它自己本身的值也发生了变化,例如a=9,则经过a>>1之后,a=4。
<<:左移运算符,和右移运算符一样,只不过移动的方向不一样。左移一次就相当于乘以2,无论正负,低位均以0填补。
注:位移运算符均以操作数的bit数为周期,举例来说,假设有int a=9,则a>>2与a>>34的结果就是一样的,因为34-2=32,刚好是a所占的位数,32位。
>>>:和>>基本上相同,唯一的区别就是进行>>运算时高位是以符号位来进行填充,而进行>>>运算的时候,高位则全部是用0来填充
最后补充一点,如何得到一个负数的补码?
以-9为例,我们有两种不同的途径得到它的补码,为了方便起见,假设其只占8位:
方法一:
步骤一:写出其绝对值的补码,即原码,得到00001001
步骤二:对其减一,于是得到00001000
步骤三:取反,得到11110111,就是-9的补码
方法二:
步骤一:求得该负数加1之后的绝对值,即得到8
步骤二:写出该绝对值的补码,得到00001000
步骤三:取反,得到11110111,与方法一的结果一样
另外,如果已知的是一个负数的补码,要你求它的值,例如让你求11110111表示哪个数值,我们可以首先求反再加一得到00001001,这个数就是所要求负数的绝对值,于是我们可以知道11110111代表的是-9。