左移运算能够实现二倍乘法,比直接乘法要快得多。
int是定义的有符号数,左移会导致符号位移出去,导致内存溢出。
右移不会导致溢出,有符号数进行右移的时候,头部的0会保存,1会重新设置在头部。
左移:将数据对应的二进制值逐位左移若干位;高位丢弃,低位补零;乘以2的n次方
右移:将数据对应的二进制值逐位右移若干位:低位丢弃,高位补0或1(根据符号位判断,就是正数数补0,负数补1);除以2的n次方
>>:除以2的n次方
不同:根据符号位将最高位补0或者补1,如果符号位为0,左边补0,如果符号位为1,左边补1
左移<<:
高位丢弃,低位补零
实现2倍乘运算: 左移n位就是将数值*2的n次方
注意:如果数据类型为有符号型,由于高位丢弃,发生溢出
1.左移 <<
将数据对应的二进制位值逐位左移若干位
规则:高位丢弃,低位补0
eg.a: 00000000 00000000 00000000 00101010
a<<4 (0000)00000000 00000000 00000010 10100000
应用:将操作数*2^n
2.右移 >>
将数据对应的二进制位值逐位右移若干位
规则:低位丢弃,高位补0
应用:将操作数/2^n
注意符号位
a<<n a=a*2^n;
左移n位=*2^n
注意溢出现象——int在移出时符号为被移出。
右移n位=/2^n
<<左移若干位
>>右移若干位
int a=3;//00000011
a<<4=00110000=48,高四位被舍弃
左移n位 a*2^n,符号位溢出
右移n位 a/2^n,根据符号位决定左边补0还是1
左移(高位丢弃,地位补0):将值乘以2的N(左移位数)次方、实现乘数为2的运算。问题:有符号位,容易移除
左移(低位丢弃,高位根据情况补):将值除以2的N(左移位数)次方、实现除数为2的运算。问题:有符号位,高位根据计算机补位,无符号为,高位补0