And there's one thing that I need from you
我只需要你为我做一-件事
Can you come through, through
待在我的身边就好
Through, yeah
你可以抚慰一切不满
And there's one thing that I need from you
你可以过来
Can you come through?
待在我的身边吗
-comethru·Jeremy Zucker
进制进制的分类
二进制:0,1 满2进1
八进制:0~7 满8进1,以0开头
十进制:0~9 满10进1
十六进制:0~9及A~F 满16进1,以0x或0X开头表示,A~F不区分大小写
进制的转换
--- 第一组(其他进制转十进制)------------
规则:从低位开始,将每个位上的数提取出来,乘以2/8/16的(位数-1)次方,然后求和
1)二进制转十进制
规则:从低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
1011 = 1 * 1 + 1 * 2 + 0 * 2 * 2 + 1 * 2 * 2 * 2 = 1 + 2 + 0 + 8 = 11
2)八进制转十进制
规则:从低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
123 = 3 * 1 + 2 * 8 + 1 * 8 * 8 = 3 + 16 + 64 = 83
3)十进制转十六进制
规则:从低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
0x34A = 10 * 1 + 4 * 16 + 3 * 16 * 16 = 10 + 64 + 768 = 842
--- 第二组(十进制转其他进制)------------
规则:将该数不断除以2/8/16,直到商为0,然后将每步得到的余数倒过来
1)十进制转二进制
规则:将该数不断除以2,直到商为0,然后将每步得到的余数倒过来
56 = (((((56 / 2)/2)/2))/2)/2 = 111000
2)十进制转八进制
规则:将该数不断除以8,直到商为0,然后将每步得到的余数倒过来
156 = ((156 / 8)/8)= 0234
3)十进制转十六进制
规则:将该数不断除以16,直到商为0,然后将每步得到的余数倒过来
356 = ((356 / 8)/8)= 164
--- 第三组(二进制转其他进制)------------
规则:将二进制数每 3/4 位一组(从低位开始组合),转成对应的八进制数即可
1)二进制转八进制
规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可
11010101 = 11(3)010(2)101(5)= 325
2)二进制转十六进制
规则:将二进制数每四位一组(从低位开始组合),转成对应的八进制数即可
11010101 = 1101(D)0101(5)= 0xD5
--- 第四组(其他进制转二进制)------------
规则:将8/16进制数每1位,转成对应的一个3/4位的二进制数即可
八进制转二进制
规则:将八进制数每1位,转成对应的一个3位的二进制数即可
237 = 2(010)3(011)7(111)= 010011111
十六进制转二进制
规则:将十六进制数每1位,转成对应的一个4位的二进制数即可
0x237A = 2(0010)3(0011)7(0111)A(1010)= 0010001101111010
原码、反码、补码
对于有符号的而言
1).二进制的最高位是符号位,0正数,1负数
1 => [0000 0001], -1 => [1000 0001]
2).正数的原码/反码/补码都一样
1 => 原码[0000 0001] 反码[0000 0001] 补码[0000 0001]
3).负数的反码 = 它的符号位不变,其他位取反
4).负数的补码 = 它的反码 + 1
-1 => 原码[1000 0001] 反码[1111 1110] 补码[1111 1111]
5).0的反码,补码都是0
6).在计算机运算的时候,都是以补码的方式运算的
1 + 1 ; 1 - 1 = 1 + (-1)
位运算& | << >>
& : 两位全为1,结果为1,否则为0
| : 两位有一位为1(包含两位1),结果为1,否则为0
^ : 两位一位为1(只有一位1),结果为1,否则为0
// 2的补码 0000 0010
// 3的补码 0000 0011// 2&3 0000 0010 => 2fmt.Println(2&3)// 2|3 0000 0011 => 3fmt.Println(2|3)// 2^3 0000 0001 => 1fmt.Println(2^3)// -2的原码 1000 0010
// -2的反码 1111 1101
// -2的补码 1111 1110
// 2的补码 0000 0010
// 结果的补码 1111 1100
// 结果的反码 1111 1011
// 结果的原码 1000 0100 => -4fmt.Println(-2^2)
a := 1 >> 2b := -1 >> 2c := 1 << 2d := -1 << 2// 0000 0001 >> 0000 0000 => 0fmt.Println(a) // 0
// -1的原码 1000 0001
// -1的反码 1111 1110
// -1的补码 1111 1111
// >>2 的补码 1111 1111
// >>2 的反码 1111 1110
// >>2 的原码 1000 0001 => -1fmt.Println(b) // -1
// 0000 0001 >> 0000 0100 => 4fmt.Println(c) // 4
// -1的原码 1000 0001
// -1的反码 1111 1110
// -1的补码 1111 1111
// <<2 的补码 1111 1100
// <<2 的反码 1111 1011
// <<2 的原码 1000 0100 => -4fmt.Println(d) // -4