移位运算符是和原码,反码,补码相挂钩的,是相互练习的,所以想搞懂移位运算符,就必须要搞懂什么是原码,什么是反码,什么是补码,他们之间是怎样去转化的,上一期已经总结了原码,反码,补码,这一期就总结一下移位运算符的相关知识,并重温原码,反码,补码
移位运算符
移位运算符它主要包括:左移位运算符(<<)、右移位运算符(>>>)、带符号的右移位运算符(>>),移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。
1.1左移运算符
左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)
正数
System.out.println(13<<3);//左移运算符,后面补0(三个0)
13的原码:00000000 00000000 00000000 001101
将这个原码后面补三个0,也就是向左边移动指定的位数(3)
移动后的13的原码再转化为十进制,答案就是104
13的原码:00000 00000000 00000000 001101000 =104
负数案例
System.out.println(-2<<3);//左移运算符,后面补0(三个0)
-2的原码:10000000 000000000 00000000 00000010
-2的反码:11111111 111111111 11111111 11111101
-2的补码:11111111 111111111 11111111 11111110
开始移位:后面补0
-2的补码(移位后):11111 111111111 11111111 11111110000
-2 的反码(移位后):11111 111111111 11111111 11111101111
-2的原码(移位后):10000 00000000 0000000 0000010000=-16
1.2 带符号的右移运算符
有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数
前面补三个0
符号扩展进行移位,即:若符号为正,则在高位插入0,若符号为负,则在高位插入1(符号位保持不变)
正数的案例
System.out.println(2>>3);
2的原码:00000000 000000000 00000000 00000010
移位后的原码:00000000 000000000 00000000 00000000=0
负数的案例
System.out.println(-20 >> 2);
-20的原码:10000000 00000000 00000000 00010100
-20的反码:11111111 11111111 11111111 11101011
-20的补码:11111111 11111111 11111111 11101100
开始移位
-20的补码:1111111111 11111111 11111111 111011
-20的反码:1111111111 11111111 11111111 111010
-20的原码:10000000 00000000 00000000 00000101=-5
无符号右移
表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
他和带符号右移的区别: