深入理解计算机系统 第二章 信息的表示和处理(2)

接上一次的部分,后两节讲的是整数运算以及浮点数的运算。整数分为无符号数字和补码。浮点数分为二进制小数和IEEE浮点表示。

三种数字表示:

  1. 无符号:传统的二进制表示法
  2. 补码:表示有符号整数的最常见方法
  3. 浮点数:表示实数的科学计数法的以为为基底的版本
    结果太大,超出位数的限制时——溢出

逻辑右移和算数右移: 逻辑右移在左端补0,算数右移在左端补最高有效位的值。无符号数右移必须是逻辑右移,有符号数没有要求,但是基本实现算术右移。

实现中当左移或者右移超过数据位数时,对移位数量取余,但标准没有规定。

无符号加法等价于计算和mod 2^w。 s = x + y,当且仅当s < x或s < y时发生溢出。

补码加法,负溢出得到正数,正溢出得到负数。

补码的非,x>-2^(w-1) 时为-x,x=-2^(w-1)时为它本身。求补码的非可以采用两种方法:

  1.   取反加一
  2.   将最右边1的左边所有位取反

无符号乘法:xy = (xy)mod(2^w)。

整数乘法代价很高,编译器会尝试将乘法优化为加法和位移来提高性能。例如x14=(x<<3)+(x<<2)+(x<<1),或者x14=(x<<4)-(x<<1)

浮点数的舍入以及浮点运算。

原文地址:https://www.cnblogs.com/zhishuiyushi/p/11520535.html