计算机内部数据表示
Q: 计算机内部如何表示数据?
A: 计算机内部使用二进制来表示数据,包括数值、字符、音频、视频等信息。


Q: 数值数据可以分为哪几类?
A: 数值数据可以分为无符号数、有符号数、定点数和浮点数。


Q: 机器码是什么?
A: 机器码是指计算机内部用来表示数据的二进制编码,包括原码、补码、反码、移码等。


Q: 不同数据格式的机器码表示方式有哪些?
A: - 无符号数:所有位都用来表示数值。
- 定点整数:最高位为符号位,其余位为数值位。
- 定点小数:最高位为符号位,其余位为数值位,小数点隐含在符号位和数值位之间。
- 单精度浮点数:由符号位、阶码和尾数组成,共32位。
- 双精度浮点数:由符号位、阶码和尾数组成,共64位。

Q: 真值是什么?
A: 真值是指日常生活中熟悉的数值,与计算机内部的机器码对应。
Q: C 语言中有哪些数据类型对应计算机内部的数据表示?
A: C 语言中包含无符号数和有符号数的数据类型,例如 unsigned int、int、float、double 等。
进位计数制及其数据之间的相互转换
Q: 如何表示不同进制的数?
A: 使用圆括号括起来,并在右下角标注基数,例如:
- 十进制:
123 - 二进制:
1011(2) - 八进制:
57(8) - 十六进制:
1A(F)

Q: 二进制与八进制、十六进制之间的相互转换方法是什么?
A: - 二进制与八进制:每三位二进制数对应一位八进制数。
- 二进制与十六进制:每四位二进制数对应一位十六进制数。

整数部分向前高位补充0,小数部分,向后低位补充0

Q: 如何将任意进制数转换成十进制数?
A: 使用安全展开法,将每个数位的值乘以其位权并相加。
- 将数值的每个数位乘以其对应的位权。
- 将所有结果相加得到十进制数。

Q: 除基取余法的步骤是什么?
A: 1. 将十进制数除以目标进制的基数。
2. 记录余数作为目标进制数的最低位。
3. 用商继续除以基数,重复步骤直到商为零。


Q: 乘基取整法的步骤是什么?
A: 1. 将十进制小数乘以目标进制的基数。
2. 记录整数部分作为目标进制数的小数位。
3. 用小数部分继续乘以基数,重复步骤直到小数为零或达到指定精度。


Q: 为什么并非每个十进制小数都可以准确地用二进制表示?
A: 在计算机中,小数是离散的,某些十进制小数(如 0.3)无法精确表示为二进制小数。

定点数的编码表示
Q: 真值和机器数的区别是什么?
A: 真值是日常生活中使用的带符号的数,机器数是计算机内部用来表示数据的二进制编码。
Q: 定点表示法是什么?
A: 定点表示法是指小数点位置固定的数据格式,包括定点小数和定点整数。

Q: 定点小数的表示形式是什么?
A: 定点小数是纯小数,小数点位置在符号位之后、有效数值部分最高位之前。
符号位用比特 0 表示正号,符号位用比特 1 表示负号,数值位取真值的绝对值。




Q: 定点整数的表示形式是什么?
A: 定点整数是纯整数,小数点位置在有效数值部分最低位之后。
- 对于
,原码表示为 0,X。 - 对于
,原码表示为 2^N + |X|。

Q: 原码表示法的定义是什么?
A: 正数的原码与真值相同,负数的原码符号位为 1,数值位为其绝对值的二进制表示。
Q: 原码表示法的优缺点是什么?
A: - 优点:与真值的对应关系简单直观,转换方便。
- 缺点:0 的表示不唯一,加减运算复杂。
Q: 补码表示法的定义是什么?
A: 正数的补码与原码相同,负数的补码等于模(

Q: 补码表示法的优缺点是什么?
A: - 优点:加减运算统一采用加法操作,0 的表示唯一。
- 缺点:与真值的对应关系相对复杂。

Q: 补码表示有符号整数的优势是什么?
A: 1. 0 的补码表示唯一。
2. 补码运算规则简单,符号位可以和数值位一起参加运算。
3. 补码比原码和反码多表示一个最小负数。

Q: 补码与真值之间的转换方法是什么?
A:
- 真值转换为补码:正数与原码相同,负数符号位取 1,其余各位由真值“各位取反,末位加 1”得到。
- 补码转换为真值:符号位为 0,与原码相同;符号位为 1,真值的符号为负,数值部分由补码“各位取反,末位加 1”得到。

Q: 二进制减法如何计算?
A: 
Q: 反码表示法的定义是什么?
A: 正数的反码与原码相同,负数的反码等于其补码减 1。或者说,符号位不变,数值位取反


Q: 反码的优缺点是什么?
A: - 优点:符号位可以参与运算。
- 缺点:0 的表示不唯一,表示范围比补码少一个最小负数。
Q: 移码的定义是什么?
A: 移码是在真值上加上一个常数(偏置值),通常取


Q: 移码表示法的特点是什么?
A: 0 的表示唯一。
移码与补码仅差一个符号位。
移码保持了数据原有的大小顺序。

整数的表示
Q: 无符号整数的定义是什么?
A: 无符号整数是指所有二进制位都用来表示数值,没有符号位。
Q: 无符号整数的表示范围是什么?
A: 对于
Q: 有符号整数的表示范围是什么?
A: 对于
计算机中的数据类型
Q: C 语言中的整型数据类型有哪些?
A: C 语言中的整型数据类型包括字符型 (char)、短整型 (short)、整型 (int) 和长整型 (long)。
Q: C 语言中默认的整型数据类型是什么?
A: 除 char 外,其他整型数据类型默认是有符号整数,而 char 默认是无符号整数。
Q: 强制类型转换的格式是什么?
A: 强制类型转换的格式为 TYPE b = (TYPE) a。
C语言中的数据类型转换
Q: C语言中整形数据之间的转换分为哪几种情况?
A: C语言中整形数据之间的转换分为三种情况:
- 相同字长之间的转换
- 小字长转大字长
- 大字长转小字长
Q: 有符号数转换为无符号数时会发生什么?
A: 符号位被解释为数值的一部分,负数转换为无符号数时数值将发生变化。
Q: 无符号数转换为有符号数时会发生什么?
A: 最高位被解释为符号位,也可能发生数值的变化。
Q: 大字长变量向小字长变量转换时会发生什么?
A: 多余的高位部分被直接截断,低位部分直接赋值。
Q: 小字长变量向大字长变量转换时会发生什么?
A: 无符号整数进行零扩展,有符号整数进行符号扩展。
Q: signed/unsigned 整型数据是如何存储的?
A: signed/unsigned 整型数据都是按补码形式存储的,只是 signed 型的最高位代表符号位,而 unsigned 型的最高位表示数值位。
原码、反码、补码、移码之间的转换
Q: 真值 X 为正数时,其原码、反码、补码、移码之间的转换关系是什么?
A: 原码、反码、补码均为 0,X,移码为符号位取反,数值位不变。


Q: 真值 X 为负数时,其原码、反码、补码、移码之间的转换关系是什么?
A: 原码符号位为 1,数值位为真值 X 的绝对值;反码符号位为 1,数值位为真值 X 的绝对值按位取反;补码符号位为 1,数值位为真值 X 的绝对值按位取反,末位加 1;移码为符号位取反,数值位不变。


手动算,用扫描法

补码的补码就是原码,因为是双向的箭头

Q: 如何求一个数的相反数的补码?
A: 将该数的补码的全部位按位取反,然后末位加 1。
Q: 如何根据已知原码、反码、补码求真值?
A: 正数直接按权展开相加,负数需先转换为原码再按权展开相加。

Q: 原码、补码、反码和移码之间的对比
A: - 原码、补码、反码的符号位相同,正数的机器码相同。
- 原码、反码的表示在数轴上对称,都存在 +0 和 -0 两个 0。
- 补码、移码的表示在数轴上不对称,零的表示唯一,它们比原码、反码多表示一个数。
- 整数的补码、移码的符号位相反,数值位相同。
- 负数的补码、反码末位相差 1。
Q: 如何判断负数的补码、反码的大小?
A: 对于负数,数值位部分越小,其绝对值越大,即负得越多。