进制

来源:互联网 发布:济南物流软件开发 编辑:程序博客网 时间: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