了解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] = ' ';
}
这是使用位运算的二进制转换的简单实现。
- 变量
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
.
相关文章:
- C++从二进制转换为十进制数
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 十进制到二进制转换器 c++
- 将二进制转换为十进制,我如何要求用户仅输入二进制
- 十进制,包括负到 32 位二进制转换器
- 输入 1024 后十进制到二进制转换的输出错误?
- C 二进制转换为双精度的转换运算符
- 将二进制转换为负整数
- 如何将 32 位编译二进制转换为 64 位
- 如何在 C++ 中将二进制转换为十六进制
- 如何理解 c++ 中的 MNIST 二进制转换器?
- 以下对二进制转换代码的小数如何工作
- 具有递归功能的二进制转换给出一个奇数值
- 了解C++位操作中的二进制转换实现
- 编写将二进制转换为文本C 6的程序
- 反射格雷码到二进制转换中的幻数
- 为什么我总是必须除以 49 才能得到二进制转换器 + cout 歧义的正确答案?
- 如何使用库将二进制转换为十进制<bitset>?
- C++二进制转换为十进制,八进制
- 脚本到二进制转换和对象序列化