零基础 go - 20(位运算)

15 阅读1分钟

在计算机的内部,运行各种运算时,都是以二进制的方式进行运行

一、原码、反码、补码

对于有符号的而言;

  • 二进制的最高位是符号位:0表示正数,1表示负数 。例如 1的二进制为 0000 0001,-1的二进制为 1000 0001

  • 原码:符号位 + 数值的二进制表示

  • 正数的原码、反码、补码都一样.例如1的反码补码和补码都是 0000 0001

  • 负数的反码:符号位不变,其他位取反(0-》1 1-》0)。例如-1的反码是 1111 1110

  • 负数的补码 = 反码+1.例如-1的反码是 1111 1110,-1的补码是 1111 1111

  • 0的反码、补码都是0

  • 在计算机运算的时候,都是以补码的方式来运算

二、位运算

go 中有三个位运算

  • 按位与 & :两位全为1,结果为1,否则为0

  • 按位或 |:两位有一个为1,结果为1,否则为0

  • 按位异或 ^:相同的为0,不同为1

image.png

三、移位运算

  • 左移 <<:将二进制数的所有位向左移动指定的位数,右侧空出的位用0填充。例如:1 << 2 的结果是 4(0000 0001 左移两位变成 0000 0100)

  • 右移 >>:将二进制数的所有位向右移动指定的位数,左侧空出的位根据符号位填充。例如:-4 >> 1 的结果是 -2(1111 1100 右移一位变成 1111 1110)