接题目:
对于整数参数x,计算3x/4,但是要遵循位级整数编码规则。你的代码计算3x也会产生溢出。
开始作答 官方答案(已验证)
#include <stdio.h>
#include <assert.h>
#include <limits.h>
/*Divide by power of 2.
Assume0<=k<w-1 */
int divide_power2(int x, int k) {
int is_neg = x & INT_MIN;
(is_neg && (x = x + (1 << k) - 1));
return x >> k;
}
int mul3div4(int x) {
int mul3 = (x << 1) + x;
return divide_power2(mul3, 2);
}
int main(int argc, char* argv[]) {
int x = 0x87654321;
assert(mul3div4(x) == x * 3 / 4);
return 0;
}