繁体   English   中英

c中的左移运算符

[英]Left shift operators in c

我正在学习左移操作符和数字乘以10我正在使用此代码。

long int num=a<<3+a<<1;

所以没有。 第一个与8相乘,然后与2相乘,在加上得到一个* 10,存储在num中。

但它给出了一些奇怪的结果,比如for 5 its 2560, for 6 its 6144.

任何人都可以解释一下这个实施中的错误吗?

您遇到优先级问题 - 执行订单操作符。 +比<<更紧密地绑定,所以:

一个<< 3 + A << 1

实际上意味着:a <<(a + 3)<< 1

for 5即5 << 8 << 1即2560 :)

你需要:(a << 3)+(a << 1)

请参阅: http//www.swansontec.com/sopc.html以获得澄清。

怎么warning: suggest parentheses around '+' inside '<<'

你正在使用的格式实际上是这样的..

num=a<<(3+a)<<1;

通过使用括号之类的两个应用移位运算符来区分一些

num=(a<<3)+(a<<1);

+<<之前处理。

使用(a<<3)+(a<<1)

<<运算符的优先级低于+运算符(Thumb rule Unary Arthematic Relational Logical)

所以用牙箍

     int num = (a<<3) + (a<<1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM