了解C++位操作中的二进制转换实现



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

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] = '';
}

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

  • 变量 i 表示掩码 - 一个包含 2k 值的int,其中 k 是位的位置。
  • 初始值为 2 31,左移131 生成。
  • for循环使用>>= 1来右移掩码,直到1被移出,使i == 0
  • 在每次迭代中,x&ii进行比较。当x包含1处于i 1的位置时,比较成功;否则会失败。

注意:尽管当然允许在C++中使用malloc,但这并不理想。如果要保留 C 字符串,请改用 new char[33]。一种更像C++的方法是使用 std::string .

最新更新