本文主要是介绍计算机系统漫游task02,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
信息的表示和处理
- 虚拟地址空间
- 字数据大小
- 寻址和字节顺序
- 寻址和字节顺序
- 布尔运算
- 数值信息的表示
- 相互转化
- 截断
- 加法溢出
- 两种乘法
- 两种除法
- 二进制小数
- 规格化的值
- 非规格化的值
- 特殊值
虚拟地址空间
·内存的地址的集合称为虚拟地址空间
1 byte = 8bit
字数据大小
对于一个字长为位的机器,虚拟地址的范围是0到2^w - 1
寻址和字节顺序
寻址和字节顺序
我们需要知道数据的地址和数据所占内存
字节顺序有大端法和小端法
布尔运算
注意异或运算
C语言中的一个特性就是支持按位进行布尔运算
数值信息的表示
二进制数也有正负之分,在计算机中约定,在有符号数的前面增加1位符号位,用0表示正号,用1表示负号。这种在计算机中用0和1表示正负号的数称为机器数。目前常用的机器数编码方法有原码、反码和补码3种。
原码表示的数在计算机中进行加减法运算很麻烦,因此引入反码和补码
补码的意义:最高位不仅仅代表了负号,也代表了数值,这样我们仅通过补码就可以直接知道它对应的十进制数字,甚至不需要知道它的原码。
相互转化
有符号和无符号的转换:
先转换为二进制,再根据二进制进行转换
当有符号数从一个较小的数据类型转换成较大类型时,进行符号位扩展,最高位是0,扩展的数位进行补零,最高位是1时,扩展的数位需要补1
截断
将int 类型强制类型转换成short类型时,int类型高16位数据被丢弃,留下低16位的数据,可以改变数值。
- 无符号数:
将一个w位的无符号数,截断成k位时,丢弃最高的w-k位,截断操作可以对应于取模运算,即除以2的k次方之后得到的余数 - 有符号数
我们用无符号数的取余方式先得到余数,得到最低K位
我们将第一步得到的无符号数转换成有符号数,再转成二进制。
加法溢出
无符号加法溢出,返回0
有符号加法溢出,
当x加y的和大于等于2w-1时,发生正溢出,得到的结果会减去2w
当x加y的和小于 - 2w-1时,发生负溢出,得到的结果会加上2w
两种乘法
无符号数乘法
w位的无符号数x和y,二者的乘积可能需要2w位来表示。在C语言中,定义无符号数乘法所产生的结果是w位,因此运行结果会截取低w位。因此,运行结果等于x与y乘积并对2的w次方取模。
补码乘法:
补码乘法比无符号乘法多一步,需要将无符号数转换成补码。
两种除法
以乘除2的倍数为例讨论
原码运算:对于原码,不论正负,若某个数字乘2w的倍数,则只需要对原码向左移动w个单位,空缺位补0
补码运算:正数按照原码规则计算,复数需要保证符号位不变,在向左移动时补0,向右移动时补1
二进制小数
IEEE 浮点表示
三个变量:符号S,阶码,和尾数M
C语言中float类型的变量占4个字节,32个比特位,这32个比特位被划分成3个字段来解释。
S= 0表示正数,S=1表示负数,8个二进制位与阶码的值E是相关的。剩余的23位与尾数M是相关的
浮点数的数值分为三类,第一类是规格化的值,第二类是非规格化的值,第三类是特殊值。阶码的值决定了这个数是属于其中哪一类。
规格化的值:阶码字段的二进制位不全为0,且不全为1
非规格化值:阶码字段的二进制全为0
特殊值:阶码字段二进制全为1
规格化的值
阶码E = e - bias
e表示8位二进制数,e_min = 1, e_max = 254
尾数M = 1 + f
非规格化的值
特殊值
这篇关于计算机系统漫游task02的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!