數據在記憶體中的儲存以及大端模式和小端模式的介紹和區分程式碼

2020-08-11 18:07:08

數據型別的介紹

c語言中的數據型別

char        //字元數據型別  1個位元組
short       //短整型  2個位元組
int         //整形  4個位元組
long        //長整型  32位元機4個位元組   64位元機8個位元組
long long   //更長的整形  8個位元組
float       //單精度浮點數  4個位元組
double      //雙精度浮點數  8個位元組

型別的意義:
1. 使用這個型別開闢記憶體空間的大小(大小決定了使用範圍)。
2. 如何看待記憶體空間的視角。

各個型別的取值範圍:
一個位元組等於8個bit位,也就表示8位元二進制數
有符號型別的第一個bit位爲符號位,1表示負數,0表示正數

char  // -128~127
unsigned char  // 0~255
short  //  -32768~32767
unsigned short // 0~65535
int // -2147483648~2147483647
unsigned int // 0~4294967295

原碼、反碼、二補數
計算機中的有符號數有三種表示方法,即原碼、反碼和二補數。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位,三種表示方法各不相同。
原碼: 直接將二進制按照正負數的形式翻譯成二進制就可以。
反碼: 將原碼的符號位不變,其他位依次按位元取反就可以得到了。
二補數: 反碼+1就得到二補數。 正數的原、反、二補數都相同。
對於整形來說:數據存放記憶體中其實存放的是二補數。

在計算機系統中,數值一律用二補數來表示和儲存。原因在於,使用二補數,可以將符號位和數值域統一處理; 同時,加法和減法也可以統一處理(CPU只有加法器)此外,二補數與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

大端模式與小端模式

大端(儲存)模式,是指數據的低位儲存在記憶體的高地址中,而數據的高位,儲存在記憶體的低地址中;
小端(儲存)模式,是指數據的低位儲存在記憶體的低地址中,而數據的高位,,儲存在記憶體的高地址中。

大端模式與小端模式的判斷:

#include <stdio.h>

int check_sys()
{
	 int i = 1;
	 return (*(char *)&i);
}

int main()
{
	int ret = check_sys();
 	if(ret == 1)
	{
 		printf("小端\n");
 	}
	else
	{
 		printf("大端\n");
 	}
	return 0;
 }