一 简介
先来回答几个问题:
1.移位操作符是什么?
2.移位操作符有哪些组成,各有什么特点?
第一个问题,移位操作符的的运算对象是二进制的“位”,它只可用于处理整数类型。
第二个问题,它由左移位操作符(<<)、右移位操作符(>>)、"无符号"右移位操作符(>>>)
左移位操作符(<<):如操作符右侧的数量是2,则将左边的操作数向左移动2位(低位补0)
“有符号”右移位操作符(>>):如操作符右侧的数量是2,则将左边的操作数向右移动2位(符号为正高位插入0,否则高位插入1)
“无符号”右移位操作符(>>>):如操作符右侧的数量是2,则将左边的操作数向右移动2位(无论符号正负高位都插入0)
二 下面来一个Demo
package thired;
public class DemoOne {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1=5,num2=2,num3=-5;
//左移位操作符
System.out.println("左移位操作符:"+(num1<<num2));
//“有符号”右移位操作符
System.out.println("右移位操作符(正):"+(num1>>num2));
System.out.println("右移位操作符(负):"+(num3>>num2));
//“无符号”右移位操作符
System.out.println("“无符号”右移位操作符(正):"+(num1>>>num2));
System.out.println("“无符号”右移位操作符(负):"+(num3>>>num1));
}
}
运行结果
左移位操作符:20
右移位操作符(正):1
右移位操作符(负):-2
“无符号”右移位操作符(正):1
“无符号”右移位操作符(负):134217727
三 注意
1.对char、byte、short进行移位操作时会将char、byte、short转换为int,得到的结果也是int
2.对long进行移位操作时位是会转换成long,得到的结果也是long
1.移位可与等号(<<= 、>>=、>>>=)组合使用,如果对byte和short进行移位操作可能会不正确,因为byte和short会先转换成int.看看代码
package thired; public class DemoOne { public static void main(String[] args) { // TODO Auto-generated method stub int num1=5,num2=2,num3=-5; //左移位操作符 System.out.println("左移位操作符:"+(num1<<num2)); //“有符号”右移位操作符 System.out.println("右移位操作符(正):"+(num1>>num2)); System.out.println("右移位操作符(负):"+(num3>>num2)); //“无符号”右移位操作符 System.out.println("“无符号”右移位操作符(正):"+(num1>>>num2)); System.out.println("“无符号”右移位操作符(负):"+(num3>>>num1)); //byte运算不正确 byte b=-1; System.out.println("byte运算1:"+(b>>>=2)); System.out.println("byte运算2:"+(b>>>2)); } }
运行结果:左移位操作符:20 右移位操作符(正):1 右移位操作符(负):-2 “无符号”右移位操作符(正):1 “无符号”右移位操作符(负):134217727 byte运算1:-1 byte运算2:1073741823
再来看两个方法 Integer.toBinaryString,用字符串形式输出二进制数。