题2.72
A.sizeof(int)返回的是size_t类型,是无符号类型,maxbytes-sizeof(val)时会被转换为无符号类型,所以条件>=0恒成立。
B.if(maxbytes >= sizeof(val))
题2.73
int saturating_add(int x, int y){ int Tmin = 1<<(sizeof(int) << 3 - 1); int Tmax = 1<<(sizeof(int) << 3 - 1) - 1; int sum = x+y; if ((x < 0) && (y < 0) && (sum >= 0)) return Tmin; if ((x >= 0) && (y >= 0) && (sum < 0)) return Tmax; return sum;}
题2.74
仅仅考虑符号位的变化。
int tsub_ovf(int x; int y){ int z = x - y; unsigned int msb = 1 << (sizeof(int) << 3 - 1); return (z&msb == y&msb) && (z&msb != x&msb);}
题2.75
unsigned unsigned_high_prod(unsigned x, unsigned y){ int w = sizeof(int)<<3; return signed_high_prod(x,y) + (x>>(w-1))&y + (y>>(w-1))&x;}
题2.84
A E=2,M=5/4,f = 1/4, V = 1.25*2^2
B 最大的整数奇数,那么二进制位表示时,最末尾肯定是1,最大的,所以其他位也为1。n位小数(0.11....11 n个1)。
以浮点数表示且不舍入,所以E = n;指数k位,因为 E= e - Bias,Bias = 2^(k-1) -1 , e =n-1+2^(k-1), f = 2^(n + 1) - 1; M = 1+f/(2^(n+1))
C 最小的规格化数,e为1,其他位为0,E =1 - (2^(k-1) - 1) = 2- 2^(k-1); M = 1; V = 1 *2^(2-2^(K-1));
其倒数1/V = 2^(2^(k-1)-2),对应E = 2^(k-1)-2 , M = 1, f=0。