数与进制的规则
数的规则
首先我们要确认了解以下规则,分别是:
- 无符号数
- 有符号数
- 整数
- 纯小数
- 带小数
而其中又有:
- 定点数:小数点位置固定
- 浮点数:小数点位置浮动

进制
何为进制
进制的规则如图所示:

在机器中,我们通常把真值用其他进制来表示,比如二进制。当然这里的真值指的是真正的值。而机器当中数值表示一共有以下几种:
十进制转任意进制
我们先来看下整数是怎么转换的,如图所示:
也就是说我们的基数r再除后,可以得到该进制的最右位数值,也就是说是这样进行的:

接着我们来看看小数部分,其实整体思路和整数差不多,只有细微差别:

这里我们会发现我们乘出来的数,求的是该小数二进制最高位,也就是说我只要乘到最后是0就好了:
那么我们来做一道例题:
本题答案
而关于任意进制转换为十进制,其实上面这些图片里面都已经有了,注意看下就好,给几道题把:
本题答案
二进制转其他进制
其实很简单,就是把二进制几个位值分为一个n进制。比如二转四就是两个二进制位等于一个四进制位。如图所示:

而其他进制转为二进制,其实就是这个的反过程,都注意补零就行。给一道例题:
本题答案
原码
我们先如图看原码,这里我们主要要搞明白数值位和符号位是两个东西:
定点整数

定点小数

优缺点和作用

原码在计算机中目前仅仅用于表示浮点数的尾码
补码
什么是补数
首先我们要了解什么是补数,这是补码的基本原理,必须要了解的:
走动最后,溢出去的位数将会抛弃,那么也就是归零。

定整数

直接先看示意图,其实也很简单理解,负数就是从满偏后移,然后加上整数就是使整数为锚点,然后向后退。
来做例题:
答案
例题二:
答案
例题二告诉了我们,其实负数会比整数多一个,而且补码会有唯一0表示方法。
定点小数

直接先看示意图,也是减去最后一位。
直接来做例题🤬:欸我超没有列题,额啊!不过不难👍所以我们说点别的,其实计算机当中并不用这个,因为误差大的同时下,还只能存纯小数,没什么用,我们可以看这个图:
反码
反码通常用来作为由原码求补码或者由补码求原码的中间过渡。
- 正数的反码:符号位为0,数值位就是它本身。
- 负数的反码:符号位为1,数值位就是真值数值位取反。

定整数

定小数

这里我们需要做一个试题,能解决我们很多疑问,并且引出一个定理:

优缺点


移码

我们可以拿这个图来练习:

答案

优缺点

各种码之间


浮点数
浮点数表示

浮点数表示范围



例题
规格化


例题
IEEE 754
IEEE 754 标准主要包括两种基本的浮点数格式:
1. 32位单精度浮点数
对应C语言中的 float 类型。
- 总位数:32位
- 结构:
- 符号位:1位(第31位),
0表示正数,1表示负数 - 阶码:8位(第30–23位),用移码表示
- 尾数:23位(第22–0位),用原码表示

处理上溢和下溢
- 符号位:1位(第31位),
2. 64位双精度浮点数
对应C语言中的 double 类型。
- 总位数:64位
- 结构:
- 符号位:1位(第63位),
0表示正数,1表示负数 - 阶码:11位(第62–52位),用移码表示
- 尾数:52位(第51–0位),用原码表示

- 符号位:1位(第63位),
核心定义
| 组成部分 | 含义与编码方式 |
|---|---|
| 符号位 | 取值 0 表示正数;取值 1 表示负数 |
| 阶码 | 定点整数,用移码表示 |
| 尾数 | 定点小数,用原码表示 |
![]() |
移码规则

1111和0000有另外用处,所以不能用。并且从-127倒数是111111全1,所以-127也不能使用。-128不用是因为溢出,故最终采用偏移常熟127。
例题
表示范围

例题
C语言数据类型转换
相同字长转换
机器码始终不变,只不过可能编码类型变了
小字长转大字长

大字长转小字长

int double float 转换
它们之间在C语言可以强制转换,不过可能会发生精度溢出等问题。它们之间转换和上面那些不同。









说些什么吧!