流行的带参宏LongToBin(n)难倒了我

2019-07-16 02:22发布

网上有一段流行的在C语言中直接写二进制数的宏难倒了我,求解释。
#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)
表达式:c=bin(10101010);则C=0xAA;
参考了谭浩强先生的C语言程序设计教材也不明白。
按我的理解展开宏
c=bin(10101010)  -------->c=LongToBin(0x##10101010##1)----------->c=(((0x##10101010##1>>21)&0x80)|((0x##10101010##1>>21)&0x80)..................
展开后0x##10101010##1>>21是怎么移位的?0x##10101010##1是一个什么数?求指点。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。