如何在c ++中分析二进制数

时间:2018-04-01 23:28:23

标签: c++ c++11

我有一个二进制数,例如1011,我想将这个数字拆分为以下数字:

  • 1000
  • 0000
  • 0010
  • 0001

如果我申请(或)" | "运算符它将产生原始数字:

1000 | 0000 | 0010 | 0001 = 1011

1 个答案:

答案 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更好,但我不知道这叫什么。您可以根据实际需要的位数来使用循环条件的值。确保不要使其大于相关类型。对于有符号类型,您不能(理论上)使用此方法提取符号位,因为位移到符号位是未定义的行为。