1. 程式人生 > 其它 >資料在記憶體中的儲存

資料在記憶體中的儲存

資料在記憶體中的儲存

1.整數在記憶體中的儲存
(1)大小端位元組序的介紹
(2)原碼,反碼與補碼
(3)判斷大小端?
2.浮點數在記憶體中的儲存

(1)常見浮點數
(2)浮點數的比較

(一) 大小端位元組序的介紹
什麼是大端小端?
小端儲存模式:資料的低位儲存在記憶體的低地址中,資料的高位儲存在記憶體的高地址中;
eg:

      int a = 0x11223344;

在這裡插入圖片描述
可以看出高位11儲存在記憶體的高地址上,低位44儲存在記憶體的低地址上;

大端儲存模式:資料的低位儲存在記憶體的高地址中,資料的高位儲存在記憶體的低地址中;
同樣的,int a = 0x11223344;在記憶體中就儲存為 11 22 33 44;

( 二 ) 原碼反碼與補碼
計算機表示符號數的三種表示方式即:原碼、反碼與補碼;而且,正數的原碼反碼與補碼均相同,那麼補碼存在又有什麼意義呢?主要是因為使用補碼,可以將符號位與數值域統一處理,而且能夠實現加減法的統一處理,不需要搭建額外的硬體電路,既節省了成本,又提高了效率!

*原碼:直接將二進位制按照正負數的形式轉化成二進位制即可;
*反碼:*將原碼的符號位不變,其他位依次取反;
*補碼*:反碼+1得到補碼;*

(三 ) 判斷大小端
同樣的,輸入int a = 0x11223344;,檢視輸出結果,如果返回0,表示小端模式,返回1,表示大端輸出模式;

#include<stdio.h>
#include<stdlib.h> int isBigEnd(int a) { int* p = &a; char* p2 = (char*)p; if (*p2 == 0x11) { return 1; } return 0; } int main() { int a = 0x11223344; printf("%d\n", isBigEnd(a)); system ("pause"); return 0; }

(四) 浮點數在記憶體中的儲存**
1. 常見浮點數
常見的浮點數有:float double
2.浮點數的比較

**
由於大多數情況下,浮點數的表示都是不精確的,因此在使用時要注意,不能直接用==比較兩個浮點數是否相等,若要比較,我們可以使用兩個浮點數作差,然後手動指定一個允許的誤差範圍即可;
下來我們可以看一個示例:

在這裡插入#include<stdio.h>
#include<stdlib.h>
int main() {
	double a = 1.6;
	double b = 0.3;
	double c = a + b;
	double d = 1.9;
	if (c== d) {
		printf("相等\n");
	}else {
		printf("不相等\n");
	 }

	system ("pause");
	return 0;

}

在這裡插入圖片描述
執行結果我們可以看到是不相等,但實際上是相等的,因此一般不這樣使用;