資料在記憶體中的儲存
阿新 • • 發佈:2021-05-25
資料在記憶體中的儲存
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;
}
執行結果我們可以看到是不相等,但實際上是相等的,因此一般不這樣使用;