整數,浮點數在記憶體中的儲存

2021-08-04 07:42:48 字數 2552 閱讀 9827

整數

符號數

計算機中的符號數有三種表示方法,即原碼,反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位表示方法各不相同。

原碼:直接將二進位制按照正負數的形式翻譯成二進位制就可以。

反碼:符號位不變,其他位按位取反即可得到。

補碼:反碼加一得到補碼。(在計算機系統中,數值一律用補碼來表示和儲存。因為使用補碼可以將符號位和數值域統一處理)

(正數原反補都相同)

表示方法:(以-1為例)

原碼:1000 0000 0000 0000 0000 0000 0000 0001

反碼:1111 1111 1111 1111 1111 1111 1111 1110(符號位不變,其它位按位取反)

補碼:1111 1111 1111 1111 1111 1111 1111 1111(記憶體存放形式)

大端模式:資料的低位儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中。

小端模式:資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中。

大小端判斷:

(1)利用指標強制型別轉換

如果是小端方式中,(i至少佔兩個位元組長度)i所分配的記憶體的最小位址那個位元組存著1,;大端的話則1在i的最高位址位元組處存放。char是乙個位元組,所以將char型量p指向i則p指向的一定是i的最低位址,則p指向的一定是i的最低位址,那麼就可以判斷p中的值是不是1來確定是不是小端。

int main()

else

return

0;}

(2)利用公共體所有資料公用同一塊位址空間

聯合體地儲存順序是所有成員都從低位址開始存放。

union a

a;int main()

else

return

0;}

典例分析

(1)

int main()

(2)

int main()

//10000000 00000000 00000000 10000000 原

//11111111 11111111 11111111 01111111

//11111111 11111111 11111111 10000000 補

//存的是補碼,低八位 10000000

//整型提公升 11111111 11111111 11111111 10000000

printf("%u",a); //列印無符號數ffffff80

(3)unsigned無符號數造成死迴圈由於i為無符號整型,當i=0時,i-1為乙個極大的正整數,導致程式陷入死迴圈

int main()

}

同理:

int main()

}

浮點數

先來看乙個例子:

num和*pfloat在記憶體中明明是同乙個數,為什麼浮點數和整數的解讀結果會差別這麼大?要明白原由一定要搞懂浮點數在計算機內部的表示方法。

析:9.0

1001.0

1.001*2^3(浮點數表示形式)

0 10000010 00100000000000000000000

表示形式:v=(-1)^s*m*2^e

s=0 v為正數 s=1 v為負數

m表示有效數字 1<=m<2

2^e表示指數字(e+12以單精度存入;e+1023以雙精度存入)

eg:

5(十進位制)

101.0(二進位制)

1.01*2^2(浮點表示)

-5 -101.0

-1.01*2^2

32位浮點數(單精度浮點數儲存模型)

64位浮點數(雙精度浮點數儲存模型)

static的總結

1,修飾全域性變數,改變的是鏈結屬性(外部鏈結屬性——>內部鏈結屬性)

2,修飾區域性變數,改變的是儲存型別(自動——>靜態),同時影響生命週期。

注:不改變作用域。

3,修飾函式,改變鏈結屬性。

整數和浮點數在記憶體中的儲存

include include intislittleend return0 int main 執行結果 負整數在記憶體的儲存 負數以補碼的形式儲存問題1 include include int main 具體求步驟 d 表示列印的是乙個有符號的十進位制的整數.1 針對char a 1 求解過程 第...

浮點數在記憶體中的儲存

浮點數在記憶體中的儲存方式與整型數字是不同的,對浮點數的儲存實際上是對ieee754中規定的s m e的儲存。浮點數 float double long double 根據國際標準ieee754,任意乙個二進位制浮點數可以被表示成下面的形式 ieee754規定 對於32位的浮點數,最高的1個位元位為...

浮點數在記憶體中的儲存

浮點數在記憶體中的儲存 常見浮點數型別 float,double,long double.那麼浮點數在記憶體中又是如何儲存的呢,它會和整數一樣嗎?那它的小數點又是如何儲存的呢 int main 執行結果為 n和 pfloat在記憶體中明明是同一位置同一數字,為什麼浮點數和整數的讀取結果會不一樣.說明...