进制
来源:互联网 发布:济南物流软件开发 编辑:程序博客网 时间:2024/05/21 22:32
进制表
二进制 八进制 十进制 十六进制
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 010 8 8
1001 011 9 9
1010 012 10 A
1011 013 11 B
1100 014 12 C
1101 015 13 D
1110 016 14 E
1111 017 15 F
进制转换
二转八,八转二:(三位二进制数换一位八进制数)
例:037 => 011 111 反之亦然
二转十六,十六转二:(四位二进制数换一位十六进制数)
例:0x5A => 0101 1010 反之亦然
二转十,十转二:
例:97 => ?
2 97 1
2 48 0
2 24 0
2 12 0
2 6 0
2 3 1
2 1 结果:1100001
反之:1100001 => ?
1*2^0 + 1*2^5 + 1*2^6 = 1 + 32 + 64 = 97
上一篇统一思想的时候提到CPU计算只会加法,而且计算机是采用二进制数制的,那么计算机怎样做到加减法的呢?
这里就要提到数字的符号位还有二进制的原码,反码和补码。
CPU里数制计算是用补码来计算的。
例:
97 原码=> 0000 0000 0000 0000 0000 0000 0110 00001
反码=> 0000 0000 0000 0000 0000 0000 0110 00001
补码=> 0000 0000 0000 0000 0000 0000 0110 00001
正数反码补码都是原码本身不变
-97 原码=>1000 0000 0000 0000 0000 0000 0110 0001
反码=>1111 1111 1111 1111 1111 1111 1001 1110
补码=>1111 1111 1111 1111 1111 1111 1001 1111
负数反码符号位不变,其他位按位求反,补码则为反码最后位加1
所以计算机中内存十六进制显示97为0x00000061,-97为0xffffff9f
+97 => 0000 0000 0000 0000 0000 0000 0110 0001 => 0x61
-97 => 1000 0000 0000 0000 0000 0000 0110 0001
(符号位不变,其他位取反+1)
=> 1111 1111 1111 1111 1111 1111 1001 1111 => 0xffffff9f
+/-97为int型,32位
有几个好玩的数:0x3e7 => 999 0x7f => 127 0xff => 255
0xffff => 65535 0xffffffff => -1
可以验证下十六进制最高位大于等于8的数其十进制数为负,反之为正。
2的次方:2 4 8 16 32 64 128 256 512 1024
0xfefe => 1111 1110 1111 1110
=> 1000 0001 0000 0010 => 256 + 2 => -258
0x8000 => 1000 0000 0000 0000
=> 1000 0000 0000 0000 => -32768