移位运算
在二进制的基础上,对数字进行平移。符号为“<<”或“>>”
对整数7进行左移,作用等同于n x 2^位移数,结果如下:
int n = 7;//00000000 00000000 00000000 00000111 = 7
int a = n << 1;//00000000 00000000 00000000 00001110 = 14,相当于7乘2的1次方
int b = n << 2;//00000000 00000000 00000000 00011100 = 28,相当于7乘2的2次方
int c = n << 28;//01110000 00000000 00000000 00000000 = 1879048192,相当于7乘2的28次方
int d = n << 29;//11100000 00000000 00000000 00001110 = -536870912,相当于7乘2的29次方
注意: 左移29位时,最高位变成了1,所以结果为负数(溢出)!
对整数28进行右移,作用等同于n / 2^ 位移数,结果如下:
int n = 28;//00000000 00000000 00000000 00011100= 28
int a = n >> 1;//00000000 00000000 00000000 00001110 =14 ,相当于28除2的1次方
int b = n >> 2;//00000000 00000000 00000000 00000111= 7,相当于28除2的2次方
int c = n >> 3;//00000000 00000000 00000000 00000011 = 3,相当于28除2的3次方
练习:
使用位运算,完成指定变量的1.5倍增长,代码如下:
public class work04 {
public static void main(String[] args) {
//使用移位运算,对指定变量进行1.5倍增加
int n = 12;
int r1 = n+(n>>1);
System.out.println("变量n=12,它的1.5倍="+r1);
int m = 16;
int r2 = m+(m>>1);
System.out.println("变量m=16,它的1.5倍="+r2);
}
}
运行结果:
注意:增长1.5倍不能直接用 " int r1 = n<<1.5; ",要用 “int r1 = n+(n+>>1)”。
就是在它现有的数据的基础上,加上它的0.5倍;向右移是不是就变成以0.5倍了,这样的话是不是加起来刚好就它的1.5倍呢!