进制、位运算 | 青训营

93 阅读3分钟

进制

表示

对于整数,有四种表示方式:

  1. 二进制:0,1。在Golang中,不能直接用二进制来表示一个整数,它沿用了c的特点。
  2. 十进制:0-9.
  3. 八进制:0-7.以数字0开头。
  4. 十六进制:0-9及A-F.以0x或0X开头。此处A-F不区分大小写。

转换

十进制与其他进制
  1. 其他进制转十进制

进制->十进制:从右边最低位开始,将每个位上的数提取出*(2的位数-1)次方再求和。

进制->十进制:从右边最低位开始,将每个位上的数提取出*(8的位数-1)次方再求和。

十六进制->十进制:从右边最低位开始,将每个位上的数提取出*(16的位数-1)次方再求和。

  1. 十进制转其他进制

十进制->进制:将该数不断除以2,直到商为0为止,然后将每步得到的余数顺序倒过来写。

十进制->进制:将该数不断除以8,直到商为0为止,然后将每步得到的余数顺序倒过来写。

十进制->十六进制:将该数不断除以16,直到商为0为止,然后将每步得到的余数顺序倒过来写。

二进制与其他进制
  1. 其他进制转二进制 进制->二进制:将八进制每1位,转成对应的一个3位的二进制数即可。

e.g.0237=>10011111

十六进制->二进制:将十六进制每1位,转成对应的一个4位的二进制数即可。

e.g.0x237=>1000110111

  1. 二进制转其他进制

二进制->进制:每3位一组(低位开始),转成对应八进制即可。

二进制->十六进制:每4位一组(低位开始),转成对应十六进制即可。

位运算

原码、反码、补码

  1. 对有符号的,二进制的最高位是符号位:0表示正数,1表示负数。

    e.g.0000 0001=>1,1000 0001=>-1

  2. 正数原码、反码、补码都一样。

  3. 负数的反码:原码的符号位不变,其他位取反。负数的补码:反码+1。

1=》原码:0000 0001,反码:0000 0001,补码:0000 0001

-1=》原码:1000 0001,反码:1111 1110,补码:1111 1111 4. 0的反码、补码都是0。 5. 计算机运算时,以补码的方式运算。

位运算符

Golang中有三个位运算:

  1. 按位与&:两位为1,结果为1,否则为0。
  2. 按位或|:两位有一个为1,结果为1,否则为0。
  3. 按位异或^:两位一个为0,一个为1,否则为0。

例子:

image.png

移位运算符

Golang中有两个移位运算符:

  1. 右移运算符<<:低位溢出,符号位不变,并用符号位补溢出的高位。
  2. 左移运算符>>:符号位不变,低位补0。

例子:

a:=1>>2 //0000 0001=>0000 0000=>0

c:=1<<2 //0000 0001=>0000 0100=>4