白百何杨洋吻戏:有关JAVA位运算的问题

来源:百度文库 编辑:高考问答 时间:2024/04/30 18:52:37
我在书里看到>>、<<、>>>运算符,说是>>>是用0填充前面的位,>>是用符号为填充左侧的位。不大理解这个解释,麻烦懂这个的详细解释一下,最好举个例子
问题补充:在JAVA2核心技术卷1上看到的。首先对于>>,何为用符号填充左侧的位?符号是什么?第二,就拿1>>>8来说,1是1,8是1000,怎么用0填充啊?
还有,这个移位运算到底有什么意义?有什么作用?
小弟非常的菜,还请高手指点
问题补充:麻烦例子通俗点,小弟我是在看不懂~

移位运算一般用来取某几个指定位上的值,或快速实现乘以或除以2^n的运算。

比如2<<1,就是把00000010变成了00000100,2变成了4,相当于乘了2;
60>>2,就是把00111100变成了00001111,60变成了15,相当于除以4。
8>>>1,8的二进制是00001000,符号位即最高位是0,所以用0填充,00001000变成00000001,得到1,相当于除以8。

以上都是对正数的操作,下面来看对负数的操作:
-12<<1,-12的补码是11110100,左移1位,变成11101000,正好是-24的补码,相当于乘以2。
-36>>2,-36的补码是11011100,右移2位,变成00110111,这是55的二进制码,与-36好像没什么关系。
-40>>>3,-40的补码是11011000,符号位即最高位为1,所以用1填充左侧的位,得到11111011,这是-5的补码,相当于除以8。

由上面的例子可见,>>>其实是为了方便实现负数整除2^n的运算。

这是一个运算符,>>叫右移位运算,>>>循环右移位.

一个简单的例子:
12>>3的结果.
一般先看机器的右移位数,一般是8位,16位.
把12写成8位的二进制数.(以八位为例.)12就是00001100,该符号为正,也就是最高位为0,00000110就是移一位的结果,00000011就是移位两位的结果,00000001就是移一位的结果,带符号移位实际上是*2或/2的运算,右移位就是/2,每移动一位/2,为保持结果不溢出而在前位加0;另一个移位运算是不考虑这个的,不管你符号如何,前边总是补0,实际上是运算无符号数的.

hao