lec02b-Integers.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lec02b-Integers

Computer Systems: A Programmer’s Perspective 计算机系统详解 Lecture 2b March 11, 2011 Wu junmin (jmwu@ustc.edu.cn) Overview Numeric Encodings Unsigned Two’s complement Programming Implications C promotion rules Basic operations Addition, negation, multiplication Programming Implications Consequences of overflow Using shifts to perform power-of-2 multiply/divide C趣味习题 以前考试中的一些习题 假设机器为32位字长,整数采用二进制补码 对以下每个C表达式: 对所有可能的参数值证明其为真 或给出反例 整数编码 C short型数据 2字节长 符号位 对二进制补码, 最高有效位指明正负数。 0 表示正 1 表示负 编码举例 (Cont.) 数值范围 无符号数 UMin = 0 000…0 UMax = 2w – 1 111…1 二进制补码值 TMin = –2w–1 100…0 TMax = 2w–1 – 1 011…1 其它值 -1 111…1 不同字长情况下的表示范围 可见: |TMin | = TMax + 1 范围不对称 UMax = 2 * TMax + 1 无符号数值 有符号数值 等价性 非负值编码相同 唯一性 每一个位串表示一个不同的整数值 每个可表示整型数有唯一编码形式 ? 可定义逆映射 U2B(x) = B2U-1(x) 无符号数的位串 T2B(x) = B2T-1(x) 二进制补码的位串 有符号数转换为无符号数(Cast) C允许从有符号数到无符号数的转换 转换结果: 位表示形式没有变化 非负值无变化 ux = 15213 负值变为大正整数 uy = 50323 有符号数与无符号数之间的关系 有符号数与无符号数之间的关系 uy = y + 2 * 32768 = y + 65536 C语言有符号数 vs. 无符号数 常量 默认为有符号数 当有U后缀时认为是无符号数 0U, 4294967259U 转换 signed unsigned 之间的转换同 U2T T2U int tx, ty; unsigned ux, uy; tx = (int) ux; uy = (unsigned) ty; 赋值与过程调用时会发生隐式类型转换 tx = ux; uy = ty; 令人惊讶的转换 表达式求值(Expression Evaluation) 如果在一个表达式中同时存在无符号数和有符号数,有符号数会被隐式转换为无符号数 包括 , , ==, =, =等比较关系操作 例如字长 W = 32 Constant1 Constant2 Relation Evaluation 0 0U -1 0 -1 0U 2147483647 -2147483648 2147483647U -2147483648 -1 -2 (unsigned) -1 -2 2147483647 2147483648U 2147483647 (int) 2147483648U 转换意外的解释 二进制补码. ? 无符号数 顺序翻转 负数 ? 大正数 符号扩展 任务: 给定 w-位有符号整数 x 转换为具有相同值的w+k-位整数 规则: 拷贝K位符号位: X ? = xw–1 ,…, xw–1 , xw–1 , xw–2 ,…, x0 符号扩展举例 从短数据类型到长数据类型转换 C 自动进行符号扩展 符号扩展证明 通过归纳法证明 归纳步骤:扩展1位保持值不变 关键: –2w–1 = –2w +2w–1 观察最高位: X –2w–1 xw–1 X ? –2w xw–1 + 2w–1 xw–1 = –2w–1 xw–1 为何使用无符号数? 不要仅仅因为数值非0而使用它 在某些机器上C编译器会产生低效代码 unsigned i; for (i = 1; i cnt; i++) a[i] += a[i-1]; 极容易出错 for (i = cnt-2; i = 0; i--) a[i] += a[i+1]; 在进行模运算时使用 多倍精度算术 其他一些深奥的问题 需要额外位以获得所需数值范围 尽量达在最大字长限制范围 Negati

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档