>>和<<运算符将二进制位进行右移或者左移操作
>>>运算符也是将二进制位进行右移,而在右移时用0填充高位。不存在<<<运算符
而>>运算符则是用符号位填充高位
/**
* 求负数的位运算
*/
//1. -10 >> 2 = ?
//2. -10的原码: 1000 0000 0000 0000 0000 0000 0000 1010 最高位代表符号位
//3. -10的反码: 1111 1111 1111 1111 1111 1111 1111 0101 符号为不变,其他位相反
//4. -10的补码:1111 1111 1111 1111 1111 1111 1111 0110 补码为反码加1
//5. 补码右移2为:1111 1111 1111 1111 1111 1111 1111 1101
//6. 补码取反为: 1000 0000 0000 0000 0000 0000 0000 0010
//7再加一得原码: 1000 0000 0000 0000 0000 0000 0000 0011 -3
public class text01 {
public static void main(String[] args) {
System.out.println(-10>>2);
}
}
下面以负数的位运算为例:
/**
* 求负数的位运算
*/
1. -10 >> 2 = ?
2. -10的原码: 1000 0000 0000 0000 0000 0000 0000 1010 最高位代表符号位
3. -10的反码: 1111 1111 1111 1111 1111 1111 1111 0101 符号为不变,其他位相反
4. -10的补码:1111 1111 1111 1111 1111 1111 1111 0110 补码为反码加1
5. 补码右移2为:1111 1111 1111 1111 1111 1111 1111 1101
6. 补码取反为: 1000 0000 0000 0000 0000 0000 0000 0010
7再加一得原码: 1000 0000 0000 0000 0000 0000 0000 0011 -3
简单来说:
负数的位运算,需要在补码的基础上进行位运算,然后再转化为原码。