深入理解计算机系统 C2 信息的表示和处理

目前记录至浮点数

2.1 信息存储

2.1.2 字数据大小

  • 虚拟地址的范围:每台计算机的字长即虚拟地址空间的最大大小,对于字长为w位的机器而言,虚拟地址的范围为0-2^w-1
  • "32位程序“和”64位程序“:区别在于程序的编译方式而不是运行的机器类型

2.1.3寻址和字节顺序

  • 大端法和小端法:
    • 大端法:最高有效字节在前(最高有效字节地址最小)
    • 小端法:最低有效字节在前(最高有效字节地址最大)
      使用强制类型转换访问和打印不同程序对象的表示

2.1.4 表示字符串

对一个字符串使用上述的show_bytes函数,在使用ascii码的任何系统上都将得到相同结果,与字节顺序与字节大小无关,平台独立性较好。

2.1.7 C语言中的位级运算

  • 对任一位向量a,有a ^ a=0
  • 位级运算的常用法:生成掩码,例如~0将生成一个所有位全为1的掩码,不论机器的字大小。

2.1.8 C语言中的移位运算

  • 左移只有一种,而右移有两种:逻辑右移和算数右移
    • 逻辑右移:直接在左端补0,无符号数必须使用逻辑右移。
    • 算数右移:如果原来数字左端第一位为1,则填充1,否则填充0,有符号数一般使用算数右移。
  • 注意:
    • 移位运算符的优先级比四则运算低
    • 应尽量避免对w位的数据类型移动k>=w位(undefined),若移动k位其结果还是原来的数

2.2整数表示

2.2.3补码编码

  • 补码编码中将字的最高有效位解释为负权,即
    补码编码的定义
  • 注意:
    • 补码是不对称的,Tmin没有与之对应的正数。
    • 对于位数相同的有符号和无符号数有Umax=2Tmax+1,-1和Umax(最大的无符号数)有同样的位表示。

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

补码to无符号
反过来有
在这里插入图片描述
显式类型转换(类型指派)和隐式类型转换(把一种变量赋给另一种变量)都会运用上述规则。
当执行运算时,如果一个运算数有符号而另一个无符号,编译器会隐式将有符号数转换为无符号数。

2.2.6 扩展一个数字的位表示

  • 将一个字长较小的数据类型转换为字长较大的:
    • 无符号数:零扩展,即直接在前面添加0
    • 补码数字:符号扩展,首位是1就补1,否则补0(类似于算数右移)
  • 对一个变量同时进行两种转换(如从short到unsigned int)时,先进行大小转换再进行符号转换。

2.2.7 截断数字

  • 截断无符号数:
    在这里插入图片描述
  • 截断有符号数:
    在这里插入图片描述

2.3 整数运算

2.3.1 无符号加法

在这里插入图片描述在这里插入图片描述

2.3.2 补码加法

在这里插入图片描述

  • 检测补码加法中的溢出有两种情况:
    • x>0,y>0且x+y<=0
    • x<0,y<0且x+y>=0

在这里插入图片描述

2.3.4 无符号乘法

在这里插入图片描述

2.3.5 补码乘法

在这里插入图片描述
检测xy是否溢出:p=xy,return !x || p/x=y;

2.3.7 除以2的幂

  • 除以2的幂的无符号除法:直接右移
  • 向下舍入的补码除法:直接右移
  • 向上舍入的补码除法:做除法x/y之前加上一个偏置量y-1
  • 对于使用算术右移的补码机器,c表达式(x<0?x+(1<<k)-1:x)>>k将计算数值x/2^k(向0舍入)

2.4浮点数

2.4.1 二进制小数

  • 二进制表示法只能准确表示能够被写成x*2^y的数,其他值只能近似表示。

2.4.2 IEEE浮点表示

IEEE浮点标准用V=(-1)s*m*2E 的形式表示一个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值