移位运算符 "<<",">>",">>>"
1、正整数原码、反码、补码都相同,如: 10的原码、反码、补码都为 0000 0000 0000 1010
2.、Java对于负整数都是以补码的形式进行存储(补码=反码+1),如: -10的二进制为1000 0000 0000 1010,反码就是 1111 1111 11111 0101,补码即为 1111 1111 1111 0110
- 有符号左移位(<<),将其转换为二进制后向左移动位数,低位用0填充
一、 有符号左移位(正整数)
int number = 10; //初始值
printBinary(number); //转化为二进制
number = number << 1; //左移1位,低位添0
System.out.println("左移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);
public void printBinary(int num){
System.out.println(Integer.toBinaryString(num)); //二进制结果为 1010
}
控制台打印结果:
10转化二进制为:1010
左移1位后二进制为:10100
十进制显示结果为:20
二、有符号左移位(负数)
int number = -10; //初始值
printBinary(number); //转化为二进制
number = number << 1; //左移1位,低位添0
System.out.println("左移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);
控制台打印结果:
-10转化二进制为:11111111111111111111111111110110
左移1位后二进制为:11111111111111111111111111101100
十进制显示结果为:-20
- 有符号右移位(>>),将其转化为二进制后向右移动位数,正整数高位用0填充,负数高位用1填充
一、有符号右移位(正整数)
int number = 10; //初始值
printBinary(number); //转化为二进制
number = number >> 1; //右移1位,低位添0
System.out.println("右移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);
控制台打印结果:
10转化二进制为:1010
右移1位后二进制为:101
十进制显示结果为:5
二、有符号右移位(负数)
int number = -10; //初始值
printBinary(number); //转化为二进制
number = number >> 1; //右移1位,高位添0
System.out.println("右移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);
控制台打印结果:
-10转化二进制为:11111111111111111111111111110110
右移1位后二进制为:11111111111111111111111111111011
十进制显示结果为:-5
- 无符号右移(>>>),它跟有符号唯一差别就是 " 不管是正整数还是负数,高位都是用0填充 "
一、 无符号右移(正整数)
int number = 10; //初始值
printBinary(number); //转化为二进制
number = number >>> 2; //右移2位,高位添0
System.out.println("右移2位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);
控制台打印结果:
10转化二进制为:1010
右移1位后二进制为:10
十进制显示结果为:2
二、 无符号右移(负数)
int number = -10; //初始值
printBinary(number); //转化为二进制
number = number >>> 2; //左移1位,低位添0
System.out.println("右移2位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);
public void printBinary(int num){
System.out.println(num+"转化二进制为:"+Integer.toBinaryString(num));
}
控制台打印结果:
-10转化二进制为:11111111111111111111111111110110
右移2位后二进制为:111111111111111111111111111101
十进制显示结果为:1073741821
- 无符号左移(>>>),实际上Java中没有无符号左移的说法,无符号左移和有符号左移是一样的概念。