第二章节二——整数表示
第二章节二——整数表示

第二章节二——整数表示

第二章——信息的表示和处理

整数表示

整型数据类型

long是唯一一个与机器相关的大小指示符. 它在32位机器上是4字节的, 在64位机器上是8字节的.

无符号数的编码

原理: 无符号数编码的定义

对向量\overrightarrow{x}=[x_{w-1},x_{w-2},...,x_0]

B2U_w(\overrightarrow{x}) \dot{=} \sum^{w-1}_{i=0}{x_i2^i}

补码编码

原理: 补码编码的定义

对向量\overrightarrow{x}=[x_{w-1},x_{w-2},...,x_0]

有:

B2T_w(\overrightarrow{x}) \dot{=} -x_{w-1}2^{w-1}+\sum^{w-2}_{i=0}{x_i2^i})

有符号数的其他表示方法

  • 反码(Ones’ Complement):

除了最高有效位的权是-(2^{w-1}-1)而不是-2^{w-1}, 它和补码是一样的:

B2O_w(\overrightarrow{x}) \dot{=}-x_{w-1}(2^{w-1}-1)+\sum_{i=0}^{w-2}x_i2^i
  • 原码(Sign-Manitude):

最高有效位是符号位, 用来决定剩下的为应该取负权还是正权:

B2S_w(\overrightarrow{x}) \dot{=} (-1)^x_{w-1} \cdot (\sum_{i=0}^{w=2}x_i2^i)

有符号数和无符号数之间的转换

C语言中的有符号数与无符号数

当执行一个运算时, 如果他的一个运算符是由富豪的而另一个是无符号的, 那么C语言会将有符号数隐式强转为无符号数.

拓展一个数字的位表示

要将一个无符号数转换为一个更大的数据类型, 我们只要简单的在表示的开头添加0. 这种运算被称为零拓展(Zero extension).

截断数字

原理: 截断无符号数

\overrightarrow{x}等于位向量[x_{w-1},x_{w-1},...,x_0],

\overrightarrow{x}'是将其截断位k位的结果: \overrightarrow{x}'=[x_{k-1},x_{k-2},...,x_0].

x=B2U_w(\overrightarrow{x}),x'=B2U_k(\overrightarrow{x}').

x'=x\space\mathsf{mod}\space2^k

原理: 截断补码数

其实就是把二进制数按照截断无符号数的方法再进行补码转换.

2条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据