C进阶-数据的存储

目录

一、数据类型介

(一)类型归类

(二)类型意义

二、大小端字节序

三、整型存储方式

四、浮点型存储方式


一、数据类型介

(一)类型归类

整型类

char   //字符型

unsigned char    //无符号

signed char //有符号

short    //短整型

unsigned short [int]    

signed short [int]

int     //整型

unsigned int    

signed int

long    //长整型

unsigned long [int]    

signed long [int]


浮点型类

float //单精度浮点类型

double//双精度浮点类型
 

(二)类型意义

1.确定所能访问的空间的大小

2.如何看待内存空间的视角

二、大小端字节序

(一)字节序概念:

CPU对内存中的数据以字节序单位进行存取的顺序

内存有高低位之分,一个数据的二进制也有高低位之分


(二)分类

大端:低地址存低位

小端:低地址存高位

主机字节序取决于CPU架构:小端--X86;大端--MIPS;(大小端之分会在网络通信的时候有影响)

(三)对数据的影响

针对存储单元大于一个字节的数据类型:short、int、long、float、double

char a[10]字符数组不受影响

int a[10]每个元素受影响,整体数组不受影响


例:

int a = 0x01020304;//0x表示十六进制,转成二进制int a = 0001 0002 0003 0004

大端:
01 02 03 04

小端:

04 03 02 01

三、整型存储方式

(一)整型存储

在内存中数据以二进制形式存储

1——  0000 0001

-1—— 1000 0001


(二)二进制存储

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位
三种表示方法各不相同。
原码:直接将二进制按照正负数的形式翻译成二进制就可以。
反码:将原码的符号位不变,其他位依次按位取反就可以得到了。
补码:反码+1就得到补码。
正数的原、反、补码都相同。
对于整型来说:数据存放内存中其实存放的是补码。

四、浮点型存储方式

(一)小数何如转换为二进制:乘二取整法

例:0.25->  01


(二)存储形式

例:

5.25->   101.01->  1.0101*2^2

0.25->    0.01->      1.0*2^-2

IEEE754标准文档规定:浮点数的表示分为三个部分:

1.S-符号位,占1个比特位

2.E-阶码位(指数位),在32位中占8个比特,在64位中占11个比特位

3.M-尾数,在32位中占23个比特位,在64位中占52个比特位


ps:由于指数位可能会出现负数,但是指数域是无符号的,无法表示负数。

故而采用指数基数:127  (真正的指数位存储的数据是实际指数值+127)

专业术语:数字的移码-1;

移码:正数的移码就是符号位取反


ps:因为浮点存储在进行浮点移动的时候,总会移动到第一个1的后边:1.XXXXX

采用这种方式之后,因为尾数部分,第一个比特位总是存储1,如果把这个1忽略掉,采用这种规则,用的时候再加上,1就不用存储了,节省一个比特位。


例:

5.25真的存储:

0 10000001 01010000 00000000 0000000


两种特殊情况:

E为全0:此时真实指数值是1-127=-126,M表示真实值(整数部分是0),通常用于表示正负0

E为全1: 此时真实指数值是255-127=128,M为全0时表示正负无穷大

你可能感兴趣的:(C语言学学学不停,c语言,经验分享,其他,数据结构)