完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请问原子大哥,有个很简单的C语言问题,但是就是怎么也想不通
我想让0x01<<4+0x05 ,应该得到0x15,可是为什么以下有3种算法 第一种不左移4位,而是直接乘以16,得到0x15 第二种左移4位,得到0x00 第三种左移4位,但是另起一行来加上value[1],得到的也是正确的0x15 想了很久,都想不通这是为什么,请知道的指导一下,谢谢[C] 纯文本查看 复制代码 u8 a,b,c,d;u8 value[2] ={0x01,0x05};a = value[0]*16 + value[1]; =0x15 b = value[0]<<4 + value[1]; =0x00c = value[0]<<4; =0x10d = b + value[1]; =0x15 |
|
相关推荐
4个回答
|
|
第二种加法运算优先级大于左移,所以先执行4+value[1];然后value[0]在执行左移前面加法的结果,变成左移9位,而b是u8类型,已经溢出,所以得到0x00;
所以要得到0x15,就改成b = (value[0]<<4) + value[1]; =0x15 |
|
|
|
好的,明白了,谢谢
|
|
|
|
其实多点注意符号优先等级和数据类型的位数就可以啦!!!
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4481 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
352浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
359浏览 2评论
381浏览 2评论
376浏览 2评论
435浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 06:28 , Processed in 0.928175 second(s), Total 81, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号