我有一个二进制数,例如1011
,我想将这个数字拆分为以下数字:
如果我申请(或)" | "运算符它将产生原始数字:
1000 | 0000 | 0010 | 0001
= 1011
。
答案 0 :(得分:1)
简单地按位 - 以及具有您想要设置为1
的位置的掩码的数字。例如
uint8_t input;
uint8_t least_significant_digit = input & 1;
如果需要,您可以使用循环生成这些。
uint8_t input;
uint8_t output[8];
for (int i = 0; i < 8; ++i) {
int mask = 1 << (7 - i); // most significant digit first as in the example
output[i] = input & mask;
}
我希望我的名字比output
更好,但我不知道这叫什么。您可以根据实际需要的位数来使用循环条件的值。确保不要使其大于相关类型。对于有符号类型,您不能(理论上)使用此方法提取符号位,因为位移到符号位是未定义的行为。