数制转换(用8bit整数说明):
十进制转二进制:
正数直接转
如
55
=
0011
0111b
负数:绝对值转换成二进制,按位取反,加1,
如-55,先把55转换成0011
0111b,取反:
1100
1000b
加1:1100
1001b
逆问题,二进制转十进制,要弄清楚是多少位的,不足的部分要在前面把0补上。
首先看首位是0还是1,
0表示正数,1表示负数。正数直接转,负数,先减一,按位取反,转换十进制,加上负号。
例如
0100
1000
转过来是72
1000
0000
第一位为1
表示是个负数,所以减一,0111
1111,取反1000
0000转换成十进制128,加上负号
-128。
有了二进制,16进制和8进制数都不是问题。
方法如下:
1.
先把数转成正的。然后用除2的方法得到2进制。
2.
把最高位变成1代表负数
3.
按位取反,末尾的那一位加一得到补码
我举个例子来说吧
如(-12)10=(
)8=(
)16
第一步:将-12看成12,转换成二进制
0000
0000
0000
1100
第二步:取反加一,为-12
1111
1111
1111
0100
第三步:转换成八进制是三位一结合:(177764)8
转换成十六进制是四位一结合:(fff4)16
这个应该是对补码进行操作吧?假如5个bit来表示一个数
可以这么证明:负数全部取反与原补码的和为11111,如果把00001与11111相加,就得到了00000,这说明这个操作最后求出来的数是正确的。
再考虑先减1再取反是一个逆操作也是正确的
其实就和-(+a)和+(-a)一个道理
进制转换,仅仅是把绝对值做“进制转换”。
正负号,不可变动。
如:-617(十进制)
=-10 0110 1001(二进制)
=-1151(八进制)
=-269(十六进制)