<< ===》左移
规律 ==》操作数A * 2 的移动数的次方
如int i=3<<1; (正数)
0/000 0011
----------------------
0000 011/0 ==》向左移1位
----------------------
0000 0110 ===》 6
i=-3<<1;
1 0/00 0011
----------------------
1 00 0011/0 ==》向左移1位
----------------------
1000 0110 ==》-6
正的移动后还是正的
负的移动后还是负的
>> ===》右移
规律 ===》操作数A 除以 2的移动数的次方
右移是在前面补数据,因为前面涉及到一个最高位符号问题
所以要注意,是补0 还是1,如果是正补0,是负补1
如 int j=-5>>2; (负数)
1000 0101 ==》原码
1111 1010 ==》反码
1111 10/11 ==》+1 补码
----------------------------- >>
11/11 1110 ==》-1 补码
1111 1101 ==》反码
1000 0010 ==》原码 (因为操作数是负数)
----------------------------- -2
>>> ==》无符号右移
和 >> 一样 但
不管操作数是正是负,都用0补位
规律 ==》操作数A * 2 的移动数的次方
如int i=3<<1; (正数)
0/000 0011
----------------------
0000 011/0 ==》向左移1位
----------------------
0000 0110 ===》 6
i=-3<<1;
1 0/00 0011
----------------------
1 00 0011/0 ==》向左移1位
----------------------
1000 0110 ==》-6
正的移动后还是正的
负的移动后还是负的
>> ===》右移
规律 ===》操作数A 除以 2的移动数的次方
右移是在前面补数据,因为前面涉及到一个最高位符号问题
所以要注意,是补0 还是1,如果是正补0,是负补1
如 int j=-5>>2; (负数)
1000 0101 ==》原码
1111 1010 ==》反码
1111 10/11 ==》+1 补码
----------------------------- >>
11/11 1110 ==》-1 补码
1111 1101 ==》反码
1000 0010 ==》原码 (因为操作数是负数)
----------------------------- -2
>>> ==》无符号右移
和 >> 一样 但
不管操作数是正是负,都用0补位