二进制
0,1
满2进1
在golang中, 不能直接使用二进制来表示一个整数, 它沿用了c的特点
十进制
0-9
满10进1
八进制
0-7
满8进1
以数字0开头表示
十六进制
0-9 A-F(A-F不区分大小写)
满16进1
以0x或0X开头表示
func main() {
var i int = 5
//二进制输出
fmt.Printf("%b \n", i)
var j int = 011
//八进制
fmt.Println("j=", j)
var k int = 0x11
fmt.Println("k=", k)
}
运行结果
101
j= 9
k= 17
位运算
func main() {
var a int = 1 >> 2
var b int = -1 >> 2
var c int = 1 << 2
var d int = -1 << 2
fmt.Println("a=", a)
fmt.Println("b=", b)
fmt.Println("c=", c)
fmt.Println("d=", d)
}
运行结果
a= 0
b= -1
c= 4
d= -4
fmt.Println(2&3)
fmt.Println(2|3)
fmt.Println(13&7)
fmt.Println(5|4)
fmt.Println(-3^3)
运行结果
2
3
5
5
-2
原码,反码,补码
- 二进制的最高位是符号位: 0表示正数, 1表示负数
- 正数的原码,反码,补码都一样
- 负数的反码=它的原码符号位不变,其它位取反
数字 | 原码 | 反码 | 补码 |
---|---|---|---|
1 | 0000 0001 | 0000 0001 | 0000 0001 |
-1 | 1000 0001 | 1111 1110 | 1111 1111 |
- 负数的补码=它的反码+1
- 0的反码,补码都是0
- 在计算机运算的时候,都是以补码的方式来运算的
位运算符和移位运算符
位运算符
运算符 | 运算规则 |
---|---|
按位与 & | 有0得0, 全1得1 |
按位或 | | 有1得1, 全0得0 |
按位异或 ^ | 相同得0, 不同得1 |
fmt.Println(2&3)
fmt.Println(2|3)
fmt.Println(2^3)
fmt.Println(-2^2)
移位运算符
运算符 | 运算规则 |
---|---|
右移运算符 >> | 低位溢出,符号位不变,并用符号位补溢出得高位 |
左移运算符 << | 符号位不变, 低位补0 |