位运算

weiyunsuan

位运算时需要明确知道的事

  • 操作数的大小(占用的内存大小)
  • 操作数是正数还是负数(符号位,数据表示)
  • 不同类型的操作数先自动对齐再进行位运算(补符号位)

对于无符号整数,右侧新增的位将用0填充;而对于有符号整数,这取决于编译器和机器的实现(大多数现代编译器在有符号整数右移时,会在左侧新增的位填充符号位,即正数填充0,负数填充1,这被称为算术右移)。

  • 正数符号位为0,右移运算时,高位补0,低位移除
  • 负数符号位为1,右移运算时,高位补1,低位移除
  • 左移运算时,最高为移除,低位补0
  • 最高位的具体位置,由数据类型决定