目錄
- 一、整數在記憶體中的存盤(32位系統)
- 位元組序(32位系統)
- 1、小端位元組序
- 2、大端位元組序
- 二、判斷當前主機是大端位元組序還是小端?(32位系統)
- 三、原碼、反碼、補碼(32位系統)
一、整數在記憶體中的存盤(32位系統)
在vs中我們通過除錯器就可以看到記憶體中的詳細情況

進入除錯階段
除錯 -->視窗—>記憶體
四個記憶體是四個視窗,記憶體1,2,3,4,都可以進入

現在我們就可以看到a的地址 0x00AFFEEC
int型在記憶體中是以4個位元組為單位存盤的,記憶體中用16進制表示,就可以看到a的值為64(16進制),10進制為100;
位元組序(32位系統)
位元組序簡單來說,就是指超過一個位元組的資料型別在在記憶體中的存盤順序,
研究數字的高位在記憶體的高地址還是低地址,
1、小端位元組序
高位位元組資料存放在高地址處、低位資料存放在低地址處,
在這里我們輸入一個十六進制數來看看在記憶體中的展示情況


可以看到44存放的位置在低地址,高位的11存放在了高地址中
2、大端位元組序
高位位元組資料存放在低地址處、低位資料存放在高地址處,
只不過日常中,大端位元組序在PC上并不是很主流
二、判斷當前主機是大端位元組序還是小端?(32位系統)
int isDuan(int a){
int* p = &a;
char* p2 = (char*)p;
if (*p2 == 0x11){
return 1;//表示大端位元組序
}
return 0;//表示小端位元組序
}
int main()
{
int a = 0x11223344;
printf("%d\n", isDuan(a));
system("pause");
return 0;
}
三、原碼、反碼、補碼(32位系統)
我們在記憶體中先觀察一個負數在記憶體中的存盤方式
int a = -10;

在記憶體中我們可以看到在記憶體的存盤的值為 f6 ff ff ff
由于我的計算機時小端位元組序,它的值就為ff ff ff f6,我們再用二進制的方式進行表示
1111 1111 1111 1111 1111 1111 1111 0110
我們再來表示-10的原碼:
1000 0000 0000 0000 0000 0000 0000 1010
第一位的1表示負數,0表示整數
而在計算機中記憶體是按照補碼的方式進行存盤,
反碼: 原碼取反
那對于剛才的-10的原碼取反得到的反碼就是
1111 1111 1111 1111 1111 1111 1111 0101
首位置表示正負不進行操作,
補碼: 反碼+1
對于-10的反碼+1我們就得到
1111 1111 1111 1111 1111 1111 1111 0110
對于補碼轉換成原碼轉換:
1111 1111 1111 1111 1111 1111 1111 1000–>補碼
1000 0000 0000 0000 0000 0000 0000 0111–>反碼
1000 0000 0000 0000 0000 0000 0000 1000–>反碼+1
可以看到:
原碼 ==> 補碼 取反+1;
反碼 ==> 補碼 取反+1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212831.html
標籤:其他
下一篇:網路編程匯總
