进制转换
什么叫进制
- 进制就是逢几进一;
-
不同语言的进制表示
C语言
八进制前要加
0
(数字0);- 十六进制前要加
0x
或0X
; -
汇编语言
在数字后加字母
B
表示二进制;- 在数字后加字母
O
表示八进制; - 在数字后加字母
D
表示十进制; - 在数字后加字母
H
表示十六进制。 ```c 例子:
1011B表示二进制的1011; 1234O表示八进制的1234; 1024D表示十进制的1024; 3FF3H表示十六进制的3FF3。
<a name="d1p5C"></a>
## 十进制转 r 进制的方法
**数值除r取余,直至商为0,余数倒序排列**即可完成进制转换。
<a name="izYR1"></a>
## r 进制转十进制的方法
例子:<br />`101012 = 1*20 + 0*21 + 1*22 + 0*23 + 1*24 = 21`
<a name="WG91o"></a>
## 二进制与十六进制的转换
<a name="uSTXi"></a>
### 二进制转十六进制的方法
从右向左,四位一组,分别转换,最前面的一组不够四位前面补零。
```c
0001 1110 ==> 1 E
十六进制转二进制的方法
将每一个十六进制位转换成四个二进制位。
0x1E ==> 0001 1110
二进制与八进制的转换
二进制转八进制的方法
从右向左,三位一组,分别转换,最前面的一组不够三位前面补零。
0 101 110 ==> 0 5 6
八进制转二进制的方法
将每一个八进制位转换成三个二进制位。
27 ==> 010 111
十六进制与八进制的转换
不存在十六进制与八进制的直接转换,都是以二进制为中间进制来进行转换。
存储编码知识
原码
原码的定义
也叫 符号-绝对值码。
最高位0表示正,1表示负,其余二进制位是该数值的绝对值二进制位。
原码的优缺点
- 原码简单易懂;
- 加减运算复杂;
- 存在加减乘除四种运算,增加了CPU的负担;
- 零的表示不唯一。
反码
正整数反码
与原码相同。负整数反码
把原码的符号位保持不变,数值位逐位取反,即可得原码的反码。补码
正整数补码
与原码相同。负整数补码
在反码的基础上加 1 即得该原码的补码。
——对补码再求一次补码操作就可得该补码对应的原码。十进制转二进制(举例)
正整数转二进制
除2取余,直至商为零,余数倒序排序。负整数转二进制
先求与该负数相对应的正整数的二进制编码,然后将所有位取反,末位加1,不够位数时,左边补1。 ```c int (-1)转二进制的过程:
-1 ==> 01(正整数二进制) ==> 10(二进制取反) ==> 11(末位加1) ==> 1111 1111 … 1111(按数据类型补齐)
int (-3)转二进制的过程:
-3 ==> 11(正整数二进制) ==> 00(二进制取反) ==> 01(末位加1) ==> 1111 1111 … 1101(按数据类型补齐)
<a name="zDReR"></a>
#### 零转二进制(零既不是正数也不是负数)
**全是零**。
<a name="Z0rxe"></a>
### 二进制转十进制(举例)
**如果首位是0,则表明是正整数,按普通方法(前面补零,即和原码一样)来计算**。<br />**如果首位是1,则表明是负整数,将所有位取反,末位加1,所得数值就是该负数的绝对值**。
```c
例子:
011 ==> 3
111 ==> -1