mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
c
This commit is contained in:
parent
186b9a4c2b
commit
687ce9d4b9
@ -960,9 +960,24 @@ int main() {
|
||||
}
|
||||
```
|
||||
|
||||
## 3.3 进制的转换
|
||||
## 3.3 进制的运算规则
|
||||
|
||||
### 3.3.1 概述
|
||||
* `十进制`的运算规则,如下所示:
|
||||
* 逢`十`进`一`(针对加法而言)。
|
||||
* 借`一`当`十`(针对减法而言)。
|
||||
* `二进制`的运算规则,如下所示:
|
||||
* 逢`二`进`一`(针对加法而言)。
|
||||
* 借`一`当`二`(针对减法而言)。
|
||||
* `八进制`的运算规则,如下所示:
|
||||
* 逢`八`进`一`(针对加法而言)。
|
||||
* 借`一`当`八`(针对减法而言)。
|
||||
* `十六进制`的运算规则,如下所示:
|
||||
* 逢`十六`进`一`(针对加法而言)。
|
||||
* 借`一`当`十六`(针对减法而言)。
|
||||
|
||||
## 3.4 进制的转换
|
||||
|
||||
### 3.4.1 概述
|
||||
|
||||
* 不同进制的转换,如下所示:
|
||||
|
||||
@ -972,9 +987,9 @@ int main() {
|
||||
|
||||
![](./assets/20.png)
|
||||
|
||||
### 3.3.2 二进制和十进制的转换
|
||||
### 3.4.2 二进制和十进制的转换
|
||||
|
||||
#### 3.3.2.1 二进制转换为十进制
|
||||
#### 3.4.2.1 二进制转换为十进制
|
||||
|
||||
* 规则:从最低位开始,将每个位上的数提取出来,乘以 2 的 (位数 - 1 )次方,然后求和。
|
||||
|
||||
@ -995,7 +1010,7 @@ int main() {
|
||||
|
||||
![](./assets/22.png)
|
||||
|
||||
#### 3.3.2.2 十进制转换二进制
|
||||
#### 3.4.2.2 十进制转换二进制
|
||||
|
||||
* 规则:将该数不断除以 2 ,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。
|
||||
|
||||
@ -1017,7 +1032,7 @@ int main() {
|
||||
|
||||
![](./assets/24.png)
|
||||
|
||||
### 3.3.3 二进制转八进制
|
||||
### 3.4.3 二进制转八进制
|
||||
|
||||
* 规则:每 3 位二进制就是一个八进制。
|
||||
|
||||
@ -1029,7 +1044,7 @@ int main() {
|
||||
|
||||
|
||||
|
||||
### 3.3.4 二进制转十六进制
|
||||
### 3.4.4 二进制转十六进制
|
||||
|
||||
* 规则:每 4 位二进制就是一个十六进制。
|
||||
|
||||
@ -1039,9 +1054,9 @@ int main() {
|
||||
|
||||
![](./assets/26.png)
|
||||
|
||||
## 3.4 原码、反码和补码
|
||||
## 3.5 原码、反码和补码
|
||||
|
||||
### 3.4.1 概述
|
||||
### 3.5.1 概述
|
||||
|
||||
* 机器数:一个数在计算机的存储形式是二进制,我们称这些二进制数为机器数。机器数可以是有符号的,用机器数的最高位来存放符号位,0 表示正数,1 表示负数。
|
||||
|
||||
@ -1051,7 +1066,7 @@ int main() {
|
||||
|
||||
![](./assets/28.png)
|
||||
|
||||
### 3.4.2 原码
|
||||
### 3.5.2 原码
|
||||
|
||||
* 原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值。
|
||||
* 规则:
|
||||
@ -1073,7 +1088,7 @@ int main() {
|
||||
>
|
||||
> 按照原码的规则,会出现 `+0` 和 `-0` 的情况,即:`0`000 0000(+0)、`1`000 0000(-0),显然不符合实际情况;所以,计算机底层虽然存储和计算的都是二进数,但显然不是原码。
|
||||
|
||||
### 3.4.3 反码
|
||||
### 3.5.3 反码
|
||||
|
||||
* 规则:
|
||||
|
||||
@ -1096,7 +1111,7 @@ int main() {
|
||||
>
|
||||
> 按照反码的规则,如果是 `+0`,对应的原码是 `0`000 0000;那么,其反码还是 `0`000 0000 ;如果是 `-0`,对应的原码是 `1`000 0000,其反码是 `1`111 1111,显然不符合实际情况;所以,计算机底层虽然存储和计算的都是二进数,但显然不是反码。
|
||||
|
||||
### 3.4.4 补码
|
||||
### 3.5.4 补码
|
||||
|
||||
* 规则:
|
||||
|
||||
@ -1128,13 +1143,13 @@ int main() {
|
||||
> * ②补码使得`加法运算`和`减法运算`可以统一处理,通过将减法运算`转换`为加法运算,可以简化硬件设计,提高了运算效率。
|
||||
> * ③ 计算机底层`存储`和`计算`的都是`二进数的补码`。
|
||||
|
||||
### 3.4.5 总结
|
||||
### 3.5.5 总结
|
||||
|
||||
* ① 正数的原码、反码和补码都是一样的,三码合一。
|
||||
* ② 负数的反码是在其原码的基础上,按位取反(0 变 1 ,1 变 0 ),符号位不变;负数的补码是其反码 + 1 。
|
||||
* ③ 0 的补码是 0 。
|
||||
|
||||
## 3.5 计算机底层为什么使用补码?
|
||||
## 3.6 计算机底层为什么使用补码?
|
||||
|
||||
* 如果计算是 `2 - 2` ,那么可以转换为 `2 + (-2)`,这样计算机内部在处理`减法计算`的时候,就会将其转换为`加法计算`的形式,以简化硬件设计和提高计算效率。
|
||||
* `最高位`表示`符号位`,由于符号位的存在,如果使用`原码`来计算,就会导致`计算结果不正确`,即:
|
||||
|
Loading…
Reference in New Issue
Block a user