CMod1=((ch&0x07)|((rng<<3)&0x18)|((INACQ<<5)&0x20)|((clk<&
答案:2 悬赏:80 手机版
解决时间 2021-02-21 20:48
- 提问者网友:沉默菋噵
- 2021-02-21 04:21
CMod1=((ch&0x07)|((rng<<3)&0x18)|((INACQ<<5)&0x20)|((clk<<6)&0xc0))&0xff 是什么意思呢
最佳答案
- 五星知识达人网友:鸽屿
- 2021-02-21 05:15
0x07的二进制是00000111,所以ch&0x07是取ch的0,1,2位,其他5位置0
同理,(rng<<3)&0x18是将rng左移3位后,取第3、4位,其他6位置0
((INACQ<<5)&0x20)是将INACQ左移5位后,取第5位
((clk<<6)&0xc0)是将clk左移6位后,取第6,7位。
可以看到,以上分别取了一些变量的0,1,2,3,4,5,6,7位,正好可以用|凑成一个字节。但C语言在做数据运算时,可能会将1个字节的数据提升为4个字节的数据,所以最后要将这个字节和0xff做位与操作,就是把高3个字节全部置0,最低的8位保留原样。
同理,(rng<<3)&0x18是将rng左移3位后,取第3、4位,其他6位置0
((INACQ<<5)&0x20)是将INACQ左移5位后,取第5位
((clk<<6)&0xc0)是将clk左移6位后,取第6,7位。
可以看到,以上分别取了一些变量的0,1,2,3,4,5,6,7位,正好可以用|凑成一个字节。但C语言在做数据运算时,可能会将1个字节的数据提升为4个字节的数据,所以最后要将这个字节和0xff做位与操作,就是把高3个字节全部置0,最低的8位保留原样。
全部回答
- 1楼网友:躲不过心动
- 2021-02-21 05:35
我不会~~~但还是要微笑~~~:)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯