赞
踩
对于整数参数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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。