接上一次的部分,后两节讲的是整数运算以及浮点数的运算。整数分为无符号数字和补码。浮点数分为二进制小数和IEEE浮点表示。
三种数字表示:
无符号:传统的二进制表示法
补码:表示有符号整数的最常见方法
浮点数:表示实数的科学计数法的以为为基底的版本
结果太大,超出位数的限制时——溢出
逻辑右移和算数右移: 逻辑右移在左端补0,算数右移在左端补最高有效位的值。无符号数右移必须是逻辑右移,有符号数没有要求,但是基本实现算术右移。
实现中当左移或者右移超过数据位数时,对移位数量取余,但标准没有规定。
无符号加法等价于计算和mod 2^w。 s = x + y,当且仅当s < x或s < y时发生溢出。
补码加法,负溢出得到正数,正溢出得到负数。
补码的非,x>-2^(w-1) 时为-x,x=-2^(w-1)时为它本身。求补码的非可以采用两种方法:
取反加一
将最右边1的左边所有位取反
无符号乘法:xy = (xy)mod(2^w)。
整数乘法代价很高,编译器会尝试将乘法优化为加法和位移来提高性能。例如x14=(x<<3)+(x<<2)+(x<<1),或者x14=(x<<4)-(x<<1)
浮点数的舍入以及浮点运算。