關於大小端的經典問題

2021-08-07 05:24:17 字數 680 閱讀 5914

int *ptr1 = (int*)(&a+1);可以這樣理解:&a+1相當於a+5,相當於跨過了整個數值,然後ptr1[-1],輸出其前乙個,就是結果5了。

int *ptr2 = (int*)((int)a+1);這個可以這樣理解:這個裡面(int)a+1,a是指的乙個位址00h,當然位址也是由資料表示的,(int)a就是吧這個位址資料強行轉換城乙個整形資料,所以(int)a + 1就是乙個整形資料加1,也就是0x01,然後(int *)是將這個資料強行轉換成乙個int位址,所以*ptr2表示的是乙個01h位址中存放的int資料,所以輸出的將其按16進製制輸出就是 02000000。

涉及大小端的問題,請參考:

大小端儲存

關於大小端的問題

討論大小端的問題就是在討論低位元組儲存在低位址還是高位址的問題 大小端記憶方式 例題 unsigned int a 0x1234 unsigned char b unsigned char a 在32位大端模式處理器上變數b等於 解析 unsigned int a 0x1234的32位完全表示是0x...

關於大小端問題的整理

首先大小端問題的 是由於作業系統中儲存是以位元組為單位儲存的,那麼大於乙個位元組的型別int long等型別自然就會涉及到位元組之間排序的問題。一 概念 1 大端模式 所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模...

大小端問題

對於位數大於 8位的處理器,例如 16位或者 32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。例如乙個 16bit 的short型x 在記憶體中的位址為 0x0010,x 的值為0x1122 那麼0x11 為高位元組...