计算机中二进制的移位运算

移位运算符:

高位左移后溢出,舍弃:

如:

    <<:左移    左移是将一个二进制操作数对象按指定的移动位数向左移,左边溢出的位数被丢弃,右边的空位用0补充。左移相当于乘以2的幂次。∫将一个运算对象的各二进制位,全部左移若干位(左边的二进制丢弃,右边补0)

            例如:左移1位

>>:有符号右移    右移是将一个二进制操作数对象按指定的移动位数向右移,右边溢出的位数被丢弃,正数时左边的空位用0补充,负数时则左边的空位用1补充。右移相当于除以2的幂次。将一个运算对象的各二进制位全部右移若干位,正数左补0,负数左补1.

例如:又移1位

高位左移后溢出,舍弃。

左移一位相当于该数乘以2,左移2位相当于该数乘以2^2=4。上面举的例子15<< 2=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。

例如,假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64,即二进制数01000000时,左移一位时溢出的是0。而左移2位时,溢出的高位中包含1,则不符合上述结论。

由下表可以看出,若a的值为64,在左移一位后相当于乘2,左移2位后,值等于256(100000000 是9位,255是:11111111 8位)。

这时候:

  1. <<1左移一位相当于 64*2 =128没有超出255 ,所以此时 直接右边直接补0即可
  2. <<2左移2位就相当于64*2*2 = 256 超出了255的范围,所以此时超出255的就采取左边的二进制丢弃,右边补0

a的值

a的二进制形式

a<<1

a<<2

64

01000000

10000000

00000001,00000000

127

01111111

11111110

00000001,11111100

猜你喜欢

转载自blog.csdn.net/luzhensmart/article/details/87859591
今日推荐