从内存中读取各个位

时间:2016-10-04 12:34:29

标签: c++ pointers memory

要将数字从基数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浪费了不必要的时间。另请指出第一个代码段中的错误。

1 个答案:

答案 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);
}

上面所示的内容并不适用于众多原因,有些原因在于您收到的评论。