抱歉天真,有人可以帮助我这个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] = '\0'; }
dasblinkenli.. 6
这是使用位操作的二进制转换的简单实现.
变量i
表示掩码 - int
包含2 k值,其中k
是位的位置.
初始值为2 31,左移1
31.
for
循环用于>>= 1
右移掩码,直到1
被移出它,制作i == 0
.
在每次迭代时x&i
进行比较i
.当x
包含1
在i
具有其的位置时,比较成功1
; 否则就失败了.
注意:尽管malloc
在C++中使用肯定是允许的,但它并不理想.如果您想使用C字符串,请new char[33]
改用.一种更像C++的方法将会使用std::string
.
这是使用位操作的二进制转换的简单实现.
变量i
表示掩码 - int
包含2 k值,其中k
是位的位置.
初始值为2 31,左移1
31.
for
循环用于>>= 1
右移掩码,直到1
被移出它,制作i == 0
.
在每次迭代时x&i
进行比较i
.当x
包含1
在i
具有其的位置时,比较成功1
; 否则就失败了.
注意:尽管malloc
在C++中使用肯定是允许的,但它并不理想.如果您想使用C字符串,请new char[33]
改用.一种更像C++的方法将会使用std::string
.