【发布时间】:2019-03-18 15:14:11
【问题描述】:
假设我有一个数字,并且我想将每隔一个位解释为一个新数字,例如
uint16_t a = 0b1111111000000001;
uint16_t mask = 0xAAAA; // 0b1010101010101010
我现在希望能够将所有其他位打包到两个 8 位变量中,例如
uint8_t b = a & mask ... // = 0b11110000
uint8_t c = a & ~mask ... // = 0b11100001
有没有一种有效的方法来做到这一点?我知道我可以循环和移位,但我会为很多数字这样做。如果我能同时得到 b 和 c 就更好了。
【问题讨论】:
-
我不知道你想做什么。 0xFF & 0xAA 是 0xAA。它不是 0xF0。从删除二进制符号开始,它很混乱。
-
@Lundin 他尝试实现
Compress函数,这让 Hacker 很高兴。然而,在他的问题中,他表达了更大的期望,这是可以做到的。 -
您正试图将结果放入
uint8_t变量中,但您的初始值为uint16_t类型,编译器会进行一些转换,您将丢失数据。 -
@Noxet 黑客的喜悦
标签: c bit-manipulation bitwise-operators