JAVA:移位运算符
位运算符用来对二进制位进行操作,分为左移位操作和右移位操作。
左移位运算符
●左移位运算的符号为<<,左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。
●特点
◆是双目运算符。
◆操作元必须是整型类型的数据。
●左位移的过程
◆假设a是一个被移位的整型数据,n是位移量。
◆a<<n运算的过程是通过将a的所有位都左移n位,每左移一个位,左边的最高位(即左边的第1位)上的0或1被移出丢弃,并用0填充右边的低位。
◆比如:对整形数 8<<1的计算
8的二进制表示: 0000,0000,0000,0000,0000,0000,0000,1000
左移一位的结果:0000,0000,0000,0000,0000,0000,0001,0000
●注意
◆左位移操作是对整型数的操作,操作符两边必须是整型。
◆比整型更小的数据类型数据将被转换成整型进行运算,比整型更大的数据类型数据是不能进行移位运算的。
◆比整型更小的数据类型数据将被转换成整型时:对于正数将高位用0填充;负数将高位用1填充。
◆例:
byte a = -8;
System.out.println(a<<2);
结果:-32
1111,1111,1111,1111,1111,1111,1111,1000
↓
1111,1111,1111,1111,1111,1111,1110,0000
◆在进行a<<n运算时
★如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a<<m运算。
★对于long型数据,系统总是先计算出n%64的结果m,然后进行a<<m运算。
★比如:
对于int数 5<<1与5<<33的结果相等;
对于long数 5<<1与5<<65的结果相等。
右移位运算符
右移位运算的符号为>>,右移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。
●特点
◆是双目运算符。
◆操作元必须是整型类型的数据。
●右位移的过程
◆假设a是一个被移位的整型数据,n是位移量。
◆a>>n运算的过程是通过将a的所有位都右移n位,每右移一个位,右边的最低位(即右边的第1位)上的0或1被移出丢弃,并用0或1填充左边的高位(a是正数时用0填充,负数时用1填充)。
◆比如:对整形数 8>>1的计算
8的二进制表示: 0000,0000,0000,0000,0000,0000,0000,1000
右移一位的结果:0000,0000,0000,0000,0000,0000,0000,0100
●注意
◆右位移操作是对整型数的操作,操作符两边必须是整型。
◆比整型更小的数据类型数据将被转换成整型进行运算,比整型更大的数据类型数据是不能进行移位运算的。
◆比整型更小的数据类型数据将被转换成整型时:对于正数将高位用0填充;负数将高位用1填充。
◆例:
byte a = -8;
System.out.println(a>>2);
结果:-2
1111,1111,1111,1111,1111,1111,1111,1000
↓
1111,1111,1111,1111,1111,1111,1111,1110
◆在进行a>>n运算时
★如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a>>m运算。
★对于long型数据,系统总是先计算出n%64的结果m,然后进行a>>m运算。
★比如:
对于int数 5>>1与5>>33的结果相等;
对于long数 5>>1与5>>65的结果相等。