从内存中读取单个比特

Reading individual bits from Memory

本文关键字:单个比 读取 内存      更新时间:2023-10-16

要将基数为10的数字转换为基数为2的数字,我想到直接从内存中读取位而不是执行位移(>>)。

考虑程序:

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;
}

位移位浪费了不必要的时间。请指出第一个代码片段中的错误

如果你真的担心移位太昂贵(这只在一些较老的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);
}

由于无数的原因,你上面所展示的是行不通的,有些原因在你收到的评论中。

相关文章: