要将数字从基数10转换为基数2,我想直接从内存中读取位而不是执行bitshift(>>
)。
考虑该计划:
int n = 14;
bool* pointer = (bool*)&n;
for(int i = 0; i < 32; i++)
cout << *(p + i);
程序未提供正确的输出。
以下程序有效:
int n = 14;
bool *p = (bool*)&n;
for(int i = 0; i < 32; i++){
cout << *p;
n = n >> 1;
}
Bitshifting浪费了不必要的时间。另请指出第一个代码段中的错误。
答案 0 :(得分:0)
如果你真的担心转移过于昂贵(例如在某些较旧的CPU上,例如68008),你可以像这样使用常量位掩码:
const unsigned int table [] = {0x00000001, 0x00000002, 0x00000004, 0x00000008,
0x00000010, 0x00000020, 0x00000040, 0x00000080,
// ...rinse and repeat until bit 31....
};
int isSet (unsigned int value, int bitNo) {
return ((value & table [bitNo]) != 0);
}
上面所示的内容并不适用于众多原因,有些原因在于您收到的评论。