进制
表示
对于整数,有四种表示方式:
- 二进制:0,1。在Golang中,不能直接用二进制来表示一个整数,它沿用了c的特点。
- 十进制:0-9.
- 八进制:0-7.以数字0开头。
- 十六进制:0-9及A-F.以0x或0X开头。此处A-F不区分大小写。
转换
十进制与其他进制
- 其他进制转十进制
二进制->十进制:从右边最低位开始,将每个位上的数提取出*(2的位数-1)次方再求和。
八进制->十进制:从右边最低位开始,将每个位上的数提取出*(8的位数-1)次方再求和。
十六进制->十进制:从右边最低位开始,将每个位上的数提取出*(16的位数-1)次方再求和。
- 十进制转其他进制
十进制->二进制:将该数不断除以2,直到商为0为止,然后将每步得到的余数顺序倒过来写。
十进制->八进制:将该数不断除以8,直到商为0为止,然后将每步得到的余数顺序倒过来写。
十进制->十六进制:将该数不断除以16,直到商为0为止,然后将每步得到的余数顺序倒过来写。
二进制与其他进制
- 其他进制转二进制 八进制->二进制:将八进制每1位,转成对应的一个3位的二进制数即可。
e.g.0237=>10011111
十六进制->二进制:将十六进制每1位,转成对应的一个4位的二进制数即可。
e.g.0x237=>1000110111
- 二进制转其他进制
二进制->八进制:每3位一组(低位开始),转成对应八进制即可。
二进制->十六进制:每4位一组(低位开始),转成对应十六进制即可。
位运算
原码、反码、补码
-
对有符号的,二进制的最高位是符号位:0表示正数,1表示负数。
e.g.0000 0001=>1,1000 0001=>-1
-
正数原码、反码、补码都一样。
-
负数的反码:原码的符号位不变,其他位取反。负数的补码:反码+1。
1=》原码:0000 0001,反码:0000 0001,补码:0000 0001
-1=》原码:1000 0001,反码:1111 1110,补码:1111 1111 4. 0的反码、补码都是0。 5. 计算机运算时,以补码的方式运算。
位运算符
Golang中有三个位运算:
- 按位与&:两位为1,结果为1,否则为0。
- 按位或|:两位有一个为1,结果为1,否则为0。
- 按位异或^:两位一个为0,一个为1,否则为0。
例子:
移位运算符
Golang中有两个移位运算符:
- 右移运算符<<:低位溢出,符号位不变,并用符号位补溢出的高位。
- 左移运算符>>:符号位不变,低位补0。
例子:
a:=1>>2 //0000 0001=>0000 0000=>0
c:=1<<2 //0000 0001=>0000 0100=>4