在玩指標時,我發現了一些有趣的東西。
我將一個 16 位 unsigned int 變數初始化為數字 32771,然后將該變數的地址分配給一個 8 位 unsigned int 指標。
現在 32771,無符號 16 位形式,具有 110000000000001 的二進制表示。因此,當第一次取消參考 8 位指標時,我希望它列印 11000000 的值,即 = 192,并且在遞增指標然后取消參考指標之后再次,預計它會列印值 00000001,即 128。
實際上,對于第一次取消參考,列印了 3,如果我從左到右讀取 11000000 并且第二次取消參考列印 128,我會得到。
int main(){
__uint16_t a = 32771;
__uint8_t *p = (__uint8_t *)&a;
printf("%d", *p); //Expected 192 but actual output 3.
p;
printf("%d", *p); //Expected 1, but actual output 128
}
我知道位是從右到左讀取的,但是在這種情況下,位是從左到右讀取的。為什么?
uj5u.com熱心網友回復:
32771 是 32768 加 3。在二進制中,它是 1000000000000011。
如果你把它分成最高有效位元組和最后一個有效位元組,你會得到 128 和 3,因為 128 * 256 3 = 32771。
所以位元組將是 3 和 128。沒有什么特別的原因應該出現在另一個之前。您的 CPU 可以按照它想要的任何順序存盤組成多位元組數的位元組。顯然,您將最低有效位元組存盤在比最高有效位元組低的地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/430512.html
上一篇:用于檔案處理的ASP.NET頁面,在程式開始之前無法獲取要呈現的加載GIF
下一篇:Python使用帶有私鑰的子行程
