簡體   English   中英

從內存中讀取單個位

[英]Reading individual bits from Memory

要將數字從基數 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);
}

由於無數原因,您在上面顯示的內容不會起作用,其中一些在您收到的評論中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM