intodd_ones(unsigned x) { unsigned y; unsigned w = 16; for(;w >= 1; w >>= 1) { y = x >> w; x ^= y; } return x & 1; }
2.71
A. packed_t是无符号数,而它包装的4个字节都是有符号数,1byte的包装在无符号数中的有符号数扩展后符号位并没有扩展。
B.
1 2 3 4 5 6 7
intxbyte(packed_tword, int byteum) { intsize = sizeof(unsigned); int left = (size - 1 - bytenum) << 3; int right = (size - 1) << 3; return (int) word << left >> right; }
2.72
A. sizeof 的返回值 size_t 是无符号类型,在做减法 maxbytes-sizeof(val) 时得到的结果被提升为无符号型,总是大于0.