通过位运算理解 C++ 中的二进制转换实现

Understanding binary conversion implementation in C++ with bit operations

我有兴趣了解十进制转二进制的实现。有人可以阐明在以下代码中使用左移和右移的目的吗?

void static inline unsignedToBinary(unsigned x, char*& bin)
{
  bin = (char*) malloc(33);

  int p = 0;
  for (unsigned i = (1 << 31); i > 0; i >>= 1)
    bin[p++] = ((x&i) == i) ? '1' : '0';
  bin[p] = '[=10=]';
}

这是使用位运算的二进制转换的直接实现。

  • 变量i表示mask - 包含2k值的int,其中k是位的位置。
  • 初始值为231,由left-shifting1由31.
  • 生成
  • for 循环使用 >>= 1 到 right-shift 掩码,直到 1 移出它,使 i == 0.
  • 在每次迭代中,x&ii 进行比较。当 xi 有它的 1 的位置包含 1 时比较成功;否则失败。

注:虽然在C++中使用malloc固然是允许的,但并不理想。如果您想继续使用 C 字符串,请改用 new char[33]。更像 C++ 的方法是使用 std::string.