逻辑右移补0,算术右移与最高位数字相同的补位
01100011(<<4 )0011 0000
01100011(>>4)0000 0110逻辑右移
01100011(>>4)0000 0110算术右移
10010101(>>4)0000 1001逻辑右移
10010101(>>4)1111 1001算术右移
x<<4 左位移4位
x>>4 右位移4位(逻辑右移)
x>>4 右位移4位(算术右移)(都是对2进制数)
左位移直接在左面补0。
C语音标准没有明确定义对于有符号数应该使用哪种类型右移––算术右移或者逻辑右移都可以。会造成可移植问题。
实际上,几乎所有编译器/机器组合都对有符号数使用算术右移,且许多程序员也都假设机器会使用这种右移。另一方面,对于无符号数,右移必须是逻辑的。
** 与C相比,java对比有明确义。>>算术右移,>>>逻辑右移。**