【发布时间】:2015-03-05 19:49:57
【问题描述】:
为什么下面的代码会产生这个错误?
error: left shift count >= width of type [-Werror]
代码:
int32_t a,b;
int64_t apo;
a = 2673;
b = 19;
apo = BIG_MULL(a,b);
printf("\n %ld \n", apo );
找到的宏here:
#define WORD_MASK ((1<<16) - 1)
#define LOW_WORD(x) (x & WORD_MASK)
#define HIGH_WORD(x) ((x & (WORD_MASK<<16)) >> 16)
#define BIG_MULL(a, b) \
((LOW_WORD(a) * LOW_WORD(b)) << 0) + \
((LOW_WORD(a) * HIGH_WORD(b)) << 16) + \
((HIGH_WORD(a) * LOW_WORD(b)) << 16) + \
((HIGH_WORD(a) * HIGH_WORD(b)) << 32)
我正在尝试乘以 32 位的有符号值。目标机器不支持 64 位数学。
【问题讨论】:
-
(HIGH_WORD(a) * HIGH_WORD(b)) << 32a和b的类型是什么? -
@HuStmpHrrr 让它成为答案
标签: c 64-bit 32-bit multiplication fixed-point