北邮CSAPP第二章之整数表示

整数表示

  • 主要内容:展示整数的两种不同表现形式,研究扩展或者收缩一个已编码整数以适应不同长度表示的效果
  • 术语详见教材
    B:二进制
    2:to
    U:无符号数
    T:补码
    w:位数

整型数据类型

  • 为各种不同的数据类型分配的字节数与32位或64位编译法有关
  • 根据字节分配,不同大小能表示的值的范围是不同的
  • 很值得注意的特点:有符号类型的范围,负数总是比整数大一。注意,必须考虑这一点,很可能会在程序中造成错误

无符号数的编码

  • 使用位向量表示整个整数数据类型。将其视作二进制表示的数,就获得了无符号表示的数据(B2U映射)
  • 无符号数的二进制表示有一个很重要的属性:每个介于0~2^w-1之间的数有一个唯一的w位的值编码 <=> B2U是一个双射 <=> B2U <-> U2B

补码编码

  • 最常见的有符号数的计算机表示方法:补码形式

  • 补码的最高位称之为负权
    B2T = -x(w-1)2^(w-1) + B2U(w-1)

  • 同无符号数编码一样,B2T也是一个双射:对于每个数x,满足TMinw <= x <= TMaxw,则T2Bw(x)是x唯一的w位模式

  • 值得注意的地方:

  1. 补码的范围是不对称的(再次强调)这将导致补码运算的特殊属性与一些细微的错误
  2. 无符号整数的最大值刚刚好比补码的最大值的两倍多一点 U M a x = 2 T M a x + 1 UMax = 2TMax + 1 UMax=2TMax+1,且 -1与UMax有相同的位表示
  • C文件中的limits.h中定义了一组常量。限制了编译器对不同整形数据的取值范围

  • 对于某些程序来说,用某个确定大小的表示来编码数据类型非常重要

  • 例如,与网络协议有关的程序,需要使得数据类型与协议指定的数据类型兼容

  • C语言确定的只是每种数据类型的最小范围,而非确定范围

  • 有符号数的其它表示方法:反码、原码
    反码:最高位是-(2^(w-1) - 1)而非-(2^(w-1)),其它与补码一致
    源码:最高有效位是符号位,其它用来确定正负值

  • 这两种表示方法都有奇怪的属性:对数字0两种不同的编码方式,出现了+0与-0

  • 反汇编器:一种将可执行程序文件转换为ASCII码形式的出现

  • 这些文件包含许多16进制的数字,使用典型的补码形式来表现这些值

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

  • 强制类型转换的结果保持位值不变,只改变了解释方式
  • 对于大多数C语言,处理同等字长的有符号数与无符号数,数值可能会变,但是位模式不会变
    T
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值