[其它应用] 没看懂这么定义是什么意思

[复制链接]
649|12
 楼主| zhuhuis 发表于 2020-8-25 22:14 | 显示全部楼层 |阅读模式

#define                LongToBin(n)\
(                \
        ((n >> 21) & 0x80) | \
        ((n >> 18) & 0x40) | \
        ((n >> 15) & 0x20) | \
        ((n >> 12) & 0x10) | \
        ((n >>  9) & 0x08) | \
        ((n >>  6) & 0x04) | \
        ((n >>  3) & 0x02) | \
        ((n      ) & 0x01)   \
)
#define bin(n)        LongToBin(0x##n##l)
这么定义是什么意思呀,没看懂,寻求高手帮忙解答。。
tian111 发表于 2020-8-25 22:17 | 显示全部楼层

很简单呀~~~

模拟二进制定义:  bin(10101010) 等价于二进制数 10101010B
 楼主| zhuhuis 发表于 2020-8-25 22:19 | 显示全部楼层

我说的是 ((n >> 21) & 0x80) | \
这些语句代表什么,看不懂
 楼主| zhuhuis 发表于 2020-8-25 22:27 | 显示全部楼层

就是这个语句 0#define                LongToBin(n)\
(                \
        ((n >> 21) & 0x80) | \
        ((n >> 18) & 0x40) | \
        ((n >> 15) & 0x20) | \
        ((n >> 12) & 0x10) | \
        ((n >>  9) & 0x08) | \
        ((n >>  6) & 0x04) | \
        ((n >>  3) & 0x02) | \
        ((n      ) & 0x01)   \
)

是什么意思。。怎么回事
songqian17 发表于 2020-8-25 22:30 | 显示全部楼层
当 n=0x10101010 时,即 n= 0b0001 0000 0001 0000 0001 0000 0001 0000
((n >> 21) & 0x80) = ((0b0001 0000 0001 0000 0001 0000 0001 0000 >> 21) & 0x80) = (0b0001 0000 000 & 0x80) = (0x80 & 0x80) = 0x80;
依次类推,得:
((n >> 18) & 0x40) = 0;
((n >> 15) & 0x20) = 0x20;
((n >> 12) & 0x10) = 0;
((n >>  9) & 0x08) = 0x08;
((n >>  6) & 0x04) = 0;
((n >>  3) & 0x02) = 0x02;
((n      ) & 0x01) = 0;
上述各式相或,得:
0x80 | 0 | 0x20 | 0 | 0x08 | 0 | 0x02 | 0 = 0xaa = 0b10101010;
chenho 发表于 2020-8-25 22:37 | 显示全部楼层
这种模拟有什么用啊?来干什么呢?
gongche 发表于 2020-8-25 22:42 | 显示全部楼层
有些寄存器设置有分位设,这样看起来比较直观
huwr 发表于 2020-8-25 22:48 | 显示全部楼层
字符串连接.....
xxmmi 发表于 2020-8-25 22:52 | 显示全部楼层

这不是宏定义吗,取某位
llia 发表于 2020-8-25 22:56 | 显示全部楼层
用十六进制来模拟二进制
 楼主| zhuhuis 发表于 2020-8-25 23:00 | 显示全部楼层

其实还是不大明白,我再琢磨琢磨吧,多谢了哈
yq小朋友 发表于 2020-8-26 15:57 | 显示全部楼层
要不问问版主吧,版主不是可以@么
小丫小萝卜 发表于 2020-8-26 15:58 | 显示全部楼层
看的我直晕
您需要登录后才可以回帖 登录 | 注册

本版积分规则

728

主题

8464

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部