我正在学习左移运算符,为了将一个数字乘以10,我使用了以下代码。
long int num=a<<3+a<<1;
这样,数字a首先乘以8,然后再乘以2,在相加得到a*10,存储在num中。
但它给出了一些奇怪的结果,例如对于5,结果是2560,对于6,结果是6144。
有人能解释一下这个实现有什么问题吗?
num=a<<(3+a)<<1;
num=(a<<3)+(a<<1);
关于 warning: suggest parentheses around ‘+’ inside ‘<<’
怎么处理?
cc -Wall file.c
。 - Dayal rai<< 运算符的优先级低于 + 运算符 (拇指规则:一元算术关系逻辑),因此请使用括号。
" int num = (a<<3) + (a<<1);
+
在 <<
之前被处理。
使用 (a<<3)+(a<<1)
long int num = a * 10L
都可以正常工作,并产生最快的代码。 - Lundin