Java[探索](三)移位操作符

来源:互联网 发布:linux dump 内存 编辑:程序博客网 时间:2024/06/07 07:38

一 简介

先来回答几个问题:


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 stubint 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 stubint 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“无符号”右移位操作符(负):134217727byte运算1:-1byte运算2:1073741823


再来看两个方法 Integer.toBinaryString,用字符串形式输出二进制数。


原创粉丝点击