Java中的位运算符:<<、>> 与>>>
·转载请标明出处
java中有三种移位运算符
1 . << : 左移运算符,num << 1,相当于num乘以2
2 . >> : 右移运算符,num >> 1,相当于num除以2
3 . >>> : 无符号右移,忽略符号位,空位都以0补齐
1.<<
<< : 左移运算符,num << 1,相当于num乘以2
正数左移低位补0。
例:
1.4<<1
2. -4 << 1
1.
4的原码为
0000 0000 0000 0000 0000 0000 0000 0100
右移一位后为:
0000 0000 0000 0000 0000 0000 0000 1000
所以转成十进制为8
2.
-4的原码为
1000 0000 0000 0000 0000 0000 0000 0100
补码为
1111 1111 1111 1111 1111 1111 1111 1100
左移一位后为
1111 1111 1111 1111 1111 1111 1111 1000
再转成原码为
1000 0000 0000 0000 0000 0000 0000 0111
转成十进制为-8。
2.>>
<< : 右移运算符,num << 1,相当于num除以2。
正数右移高位补0,负数右移高位补1。
例:
1.4<<1
2. -4 << 1
带符号右移(相当于除以2)。
1.
4的原码为
0000 0000 0000 0000 0000 0000 0000 0100
右移一位后为
0000 0000 0000 0000 0000 0000 0000 0010
转成十进制为2。
2.
-4的原码为
1000 0000 0000 0000 0000 0000 0000 0100
补码为
1111 1111 1111 1111 1111 1111 1111 1100
右移一位后为
1111 1111 1111 1111 1111 1111 1111 1110
再转成原码为
1000 0000 0000 0000 0000 0000 0000 0010
转成十进制为**-2**。
3.>>>
'>>>'无符号右移。无论是正数还是负数,高位通通补0。
例:
4 >>> 1
4的原码为
0000 0000 0000 0000 0000 0000 0000 0100
右移一位后为
0000 0000 0000 0000 0000 0000 0000 0010
最后转成十进制为2。
-4 >>> 1
-4的原码为
1000 0000 0000 0000 0000 0000 0000 0100
补码为
1111 1111 1111 1111 1111 1111 1111 1100
右移一位后为
0111 1111 1111 1111 1111 1111 1111 1110
由于右移后符号位为1,即变成正数,所以原码与补码一样为
0111 1111 1111 1111 1111 1111 1111 1110
转成十进制为2147483646
总结: 正数进行位运算的时候>>>与>>结果与意义相同
无符号右移。无论是正数还是负数,高位通通补0.
无符号右移,忽略符号位,空位都以0补齐带符号右移相当于原数据除以2的n次方
同理:带符号左移相当于原数据乘以2的n次方
下面用代码来看看这些移位运算都是怎样使用的
//位运算符使用
package com.b510.test;
/**
* @author XuLoobee
* @create date:2020-3-31
*/
public class Test {
public static void main(String[] args) {
int number = 10;
//原始数二进制
printInfo(number);
number = number << 1;
//左移一位
printInfo(number);
number = number >> 1;
//右移一位
printInfo(number);
}
/**
* 输出一个int的二进制数
* @param num
*/
private static void printInfo(int num){
System.out.println(Integer.toBinaryString(num));
}
}
运行结果位
1010
10100
1010
我们把位数补齐一下来看看
43210 | 位数 | ||
---|---|---|---|
1010 | 十进制:10 | 原始数 | number |
10100 | 十进制:20 | 左移一位 | number = number << 1 |
1010 | 十进制:10 | 右移一位 | number = number >> 1 |
看完想必大家基本会明白位运算了吧!!
XuLoobee