例如:令 n= 10000001
0x##n##l : 将 n 值强制转换成 十六进制长整数 0x10000001L (最末位L表示长整数)
((n >> 21) & 0x80) 将 n右移 21位,即0x10000001L 右移 21位之后,取其值的最低byte和 0x80相与,这样,就类似于取出n之值的最高位1,放入byte位的bit.7中,本例中,结果为 0x80 (即1000000B)
后面依次类推,取出n之值的次高位0,放入byte位的bit.6中。
.......
最后,取出n之值的最低位1,放入byte位的bit.0中。
在便用中,如指定 a = 0x81;
通过上述宏定义,可写成 a= bin(10000001);
直接用二进制数 10000001B , 表示 十六进制数 0x81。 |