我有兴趣了解将十进制转换为二进制的实现。有人可以澄清在以下代码中使用左移和右移的目的吗?
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,左移
1
31 生成。 -
for
循环使用>>= 1
来右移掩码,直到1
被移出,使i == 0
。 - 在每次迭代中,
x&i
与i
进行比较。当x
包含1
处于i
1
的位置时,比较成功;否则会失败。
注意:尽管当然允许在C++中使用malloc
,但这并不理想。如果要保留 C 字符串,请改用 new char[33]
。一种更像C++的方法是使用 std::string
.