关于位运算

<< :左移运算符,向左移若干位,高位丢弃,低位补零。x << 1,相当于 x 乘以 2(不溢出的情况下)。

>> :带符号右移,向右移若干位,高位补符号位,低位丢弃。正数高位补 0,负数高位补 1。x >> 1,相当于 x 除以 2。

>>> :无符号右移,忽略符号位,空位都以 0 补齐。

注意点:

1. 注意遇见负数的时候,一般是针对其补码进行运算,得出结果的时候需要先计算出其对应的原码,然后才能得到结果。

 

补码 -> 原码 转换(原码 -> 补码 一样):

  1. 如果符号位为0,原码 == 补码。
  2. 如果符号位为1:
    • 符号位以外的位全部取反(反码);
    • 加1。

举个例子,-10的原码为: 10000000000000000000000000001010,其反码为11111111111111111111111111110101,其补码为11111111111111111111111111110110。

 

2. 位移的位置会做模运算,假设是int类型的,则10 >> 33 等同于 10 >> (33 % 32),因为int的比特位数是32。

posted @ 2023-05-30 10:03  Vege_dog  阅读(24)  评论(0)    收藏  举报