[英]Why does the following print what it does?
typedef unsigned char byte;
unsigned int nines = 999;
byte * ptr = (byte *) &nines;
printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%d\n",ptr[0]);
printf ("%d\n",ptr[1]);
printf ("%d\n",ptr[2]);
printf ("%d\n",ptr[3]);
輸出:
3e7
3e70
231
3
0
0
我知道前兩個只是999和999 * 16的十六進制表示形式。 剩下的4是什么意思? ptr [0]到ptr [3]?
您最有可能在十六進制的32位LE系統999
上運行此命令:
00 00 03 E7
將其存儲在內存中的方式為
E7 03 00 00
因此:-
ptr[0]
指向包含E7
的字節,該字節為十進制231
ptr[1]
指向包含03
的字節(十進制為3)
ptr[2]
指向包含00
的字節,十進制為0
ptr[3]
指向包含00
的字節,十進制為0
HTH!
我認為,如果您撰寫以下內容,將會清楚地看到:
typedef unsigned char byte;
main() {
unsigned int nines = 999;
byte * ptr = (byte *) &nines;
printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%x\n",ptr[0]);
printf ("%x\n",ptr[1]);
printf ("%x\n",ptr[2]);
printf ("%x\n",ptr[3]);
printf ("%d\n",sizeof(unsigned int));
}
char是8位,一個字節,而int是4字節(在我的64字節機器中)。 在您的計算機中,數據被保存為little-endian,因此,最不重要的字節被首先定位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.