【数字逻辑】理解位运算符

<<、>>、>>>是三种位运算符:

<<    左移运算符,num << n,相当于num乘以2的n次幂

>>    右移运算符,num >> n,相当于num除以2的n次幂

>>>  无符号右移,忽略符号位,空位都以0补齐(只对32位和64位有意义)

现在我们知道了这几个运算符大概是做什么的,再来看看例子:

首先我们需要知道十进制怎么转二进制,正数这里就不解释了,我们看看负数的情况:

以 -9 为例子: 9的二进制是 1001,再按位取反,即0110,再加一得到0111。-9的二进制就是0111了。

(1) << 运算符 ,a << b,二进制左移b位后,低位补0

   9 << 2      0000  0000  0000  0000  0000  0000  0000  1001

   左移两位  0000  0000  0000  0000  0000  0000  0010  0100

   即十进制36

  -9 << 2       1111  1111  1111  1111  1111  1111  1111  0111

   左移两位   1111  1111  1111  1111  1111  1111  1101  1100

   减一取反   0000 0000 0000 0000 0000 0000 0010 0100  即十进制-36

(2)>>运算符,a >> b,二进制右移b位,低位去掉,正数时高位补0,负数时高位补1

   9 >> 2        0000  0000  0000  0000  0000  0000  0000  1001

   右移两位    0000  0000  0000  0000  0000  0000  0000  0010(高位补0)

   即十进制2

  -9 >> 2        1111  1111  1111  1111  1111  1111  1111  0111

   右移两位    1111  1111  1111  1111  1111  1111  1111  1101(高位补1)

   减一取反    0000 0000 0000 0000 0000 0000 0000 0011   即十进制-3

(3)>>>运算符,a >>> b,无符号右移,只对32位和64位有意义,二进制右移b位,低位去掉,正数和负数高位都补0

   9 >>> 2      0000  0000  0000  0000  0000  0000  0000  1001

   右移两位    0000  0000  0000  0000  0000  0000  0000  0010(高位补0)

   即十进制2

  -9 >>> 2      1111  1111  1111  1111  1111  1111  1111  0111

  右移两位     0011  1111  1111  1111  1111  1111  1111  1101(高位补0)

  即十进制1073741821

猜你喜欢

转载自blog.csdn.net/amyleeYMY/article/details/82657044