1.数据类型的基本归类
2.整形在内存中的储存
3.大端字节序存储和小端字节序存储
4.浮点数的存储规则
在c语言中数据基本分为整形,浮点型,构造类型,指针类型,空类型。
整形包含char(字符存储和表示时本质上使用ASCLL值,ASCLL是整数,字符类型也归类到整 形),short,int,long。每个类型还可以细分为两类unsigned和signed。
浮点型包含float,double。
构造类型包含数组类型,结构体类型(struct),枚举类型(enum),联合类型(union)。
指针类型包括int*,char*,float*,void*等。
空类型指以void为前缀的,通常用于函数的返回类型,函数的参数,指针类型。
整形在内存中的储存
在内存中存储的都是二进制数据,而整形的二进制表示形式有:原码,反码,补码,并且存储的都是补码。
将数分为正数与负数来区别三码:
1.正数。原码,反码,补码相同,都是这个数的二进制形式在加上n(与该类型的bit差)个0,第一位是符号位正为,负为1。例:若这个数是int类型的5,他的二进制形式是101,原码为00000000000000000000000000000101。
2.负数。原码与正数相同; 反码是符号位不变,其他位按位取反;补码是反码+1;例:若数为int类型的-5,原码:10000000000000000000000000000101;反码:11111111111111111111111111111010;补码:00000000000000000000000000000110。
大端字节序存储:把一个数据的低位字节数据存放在高地址,高位字节的数据存放在低地址。
小端字节序存储:把一个数据的低位字节数据存放在低地址,高位字节的数据存放在高地址。
例:int a=0x11(高位字节)223344(低位字节)
(低地址) (高地址)
11223344 | 44332211 |
左边为大端存储,右边为小端存储。
浮点数的存储规则
任意一个二进制浮点数都可以写成以下形式:(-1)^s*M*2^E。其中(-1)^s表示符号位,s=0为正,s=1为负。M表示有效数字,大于等于1,小于2;2^E表示指数位。
例:(float)5.5=>(二进制形式)1(1*2^2)0(0*2^1)1(1*2^0).1(1*2^-1)=>1.011*2^2(1.011=M,2^2=2^E,E为101.1=>1.011移动的位数)=>(在内存中的形式)0(符号位)10000001(若为float,为E+127的二进制形式;若为double,为E+1023的二进制形式)011(M-1)00000000000000000000。
特别注意,有一些浮点数是不能精确保存的,是有误差的,如5.3。