完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
u16 crcdata;
u8 buf[2]; buf[0]=0x12; buf[1]=0x34; 1.crcdata=buf[0]<<8+buf[1]; 2.crcdata=buf[0]<<8|buf[1]; 请问1,2两种算法的结果一样吗?如果不一样的话,结果各是多少呢? |
|
相关推荐
9个回答
|
|
基本的位操作。。。这个不能让别人帮你解答,而是要去学。。最基础的东西。百度一下:c语言 位操作。。大把
|
|
|
|
移位后高8位+低8位 与移位后高8位或上低8位结果是一样的,为什么你仿真的结果一个是0,一个是0x1234吗,运算符优先级你搞错了!
lz不妨将buf[1]=0x01试试看,就明白是什么情况了 |
|
|
|
00000001或00000001还是00000001,00000001加00000001变成00000010。
|
|
|
|
对于这种运算,自己仿真一下就知道了,把变量输出给端口,软件模拟运行,观察输出口每一次变化。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2+2=4 2*2=4 那你可以说加和乘是一样的吗
|
|
|
|
short crcdata1 = 0;
short crcdata2 = 0; short crcdata3 = 0; char buf[2]; buf[0]=0x12; buf[1]=0x33; crcdata1=(buf[0]<<8)+buf[1]; crcdata2=buf[0]<<8+buf[1]; crcdata3=buf[0]<<8|buf[1]; printf("%xrn",crcdata1); printf("%xrn",crcdata2); printf("%xrn",crcdata3); return 0; } 结果: 1233 0 1233 crcdata1 与crcdata2 不同,只是因为优先级搞错了。 相当于crcdata2=buf[0]<<(8+buf[1]); |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-19 22:04 , Processed in 2.698063 second(s), Total 73, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号