进制转换
进制转换
十进制 |
二进制 |
八进制 |
十六进制 |
1 |
0000 0001 |
1 |
1 |
2 |
0000 0010 |
2 |
2 |
3 |
0000 0011 |
3 |
3 |
4 |
0000 0100 |
4 |
4 |
5 |
0000 0101 |
5 |
5 |
6 |
0000 0110 |
6 |
6 |
7 |
0000 0111 |
7 |
7 |
8 |
0000 1000 |
10 |
8 |
9 |
0000 1001 |
11 |
9 |
10 |
0000 1010 |
12 |
a |
11 |
0000 1011 |
13 |
b |
12 |
0000 1100 |
14 |
c |
13 |
0000 1101 |
15 |
d |
14 |
0000 1110 |
16 |
e |
15 |
0000 1111 |
17 |
f |
16 |
0001 0000 |
20 |
10 |
17 |
0001 0001 |
21 |
11 |
18 |
0001 0010 |
22 |
12 |
19 |
0001 0011 |
23 |
13 |
20 |
0001 0100 |
24 |
14 |
二进制计算
一位六进制等于四位二进制
一位八进制等于三位二进制
正数的反码补码都一样
负数的反码,等于原码除了符号位取反,
负数的补码等于反码加1
按位与 :补码都为1,结果为1,结果转回原码十进制
按位或:补码有一个为1,就为1,结果转回原码十进制
按位异:补码不同就为1,结果转回原码十进制
左移运算:符号位不变,低位补0
右移运算:低位溢出,符号位不变,并用符号位补溢出的高位。
位运算
package main import "fmt" //https://www.cnblogs.com/wxisme/p/8858514.html //位运算 func main() { w5() } //相与运算 func w1() { a := 3 fmt.Printf("a二进制%b ", a) b := 7 fmt.Printf("b二进制%b ", b) c := a & b /* 都为1结果为1 3 11 7 111 结果 11 */ fmt.Println("c=", c) } //按位或操作 | func w2() { a := 3 fmt.Printf("a二进制%b ", a) b := 17 fmt.Printf("b二进制%b ", b) c := a | b /* 只要有一个为1就为1 3 11 17 10001 10011=19 */ fmt.Println("c=", c) } //按位异或操作 ^ func w3() { a := 33 fmt.Printf("a二进制%b ", a) b := 12 fmt.Printf("b二进制%b ", b) c := a ^ b /* 不同就为1 33 100001 17 001100 101101=45 */ fmt.Println("c=", c) } //左移运算符(<<) func w4() { a := 3 fmt.Printf("a二进制%b ", a) b := 2 fmt.Printf("b二进制%b ", b) c := a << b /* 不同就为1 33 0011 左移2 1100=12 */ fmt.Println("c=", c) } //右移运算符(>>) func w5() { a := 3 fmt.Printf("a二进制%b ", a) b := 2 fmt.Printf("b二进制%b ", b) c := a >> b /* 不同就为1 33 0011 右移2 0000 */ fmt.Println("c=", c) } /* 二进制计算 参考 https://www.cnblogs.com/shamo89/p/9846385.html */
12>>2 0000 1100 0000 0011=3 -12>>2 原码 反码 补码 1000 1100 1111 0011 1111 0100 移位后1111 1101 反码 1111 1100 原码 1000 0011 十进制-3