1.数据类型的介绍
基本的内置类型:
char 字符数据类型
short 短整型
int 长整形
long long 更长的整形
float 单精度浮点数
double 双精度浮点数
c语言没有字符串类型
类型的意义:
1.使用这个类型开辟内存空间的大小(大小决定了使用范围)
2.如何看待内存空间的视角(类型的不同,看待内存空间视角也不同)
1.1
整形家族:char(unsigned char,signed char)
short(unsigned short,signed short)
int(unsigned int,signed int)
long(unsigned long,signed long)
浮点型家族:
float
double
构造类型:
数组类型,结构体类型(struct),枚举类型,联合类型
指针类型:
int* p;
char* p;
float* p;
void* p;
空类型:
void表示空类型(无类型)
通常用于函数的返回类型,函数的参数,指针类型。
指针类型不同的影响:
int类型的指针修改4个字节的数字。
char类型的指针修改1个字节的数字。
2.整形在内存中的存储
一个变量的创建是要在内存中开辟空间的。空间大小是根据不同的类型而决定的。
int a=0;
int b=1;
我们指的a分配四个字节的空间。
那是如何存储的呢。
下面我们来了解一些概念:
2.1原码,反码,补码
计算机中的整数有2进制表示方法,即原码,反码,补码。
三种表示方法均有符号位和数值位;两部分,符号位是用0表示‘正’,‘1’表示负数。
而数值位,正数的原码,反码,补码均相同。
负数的三种表示方法均不同。
对于整数来说:数据存放内存中其实存放的是补码
2.2 大小端的介绍
大端存储:将数据的低地址存储到内存的高地址处。数据的高地址存储到低地址处。
小段存储:将数据的低地址存储到内存的低地址处。数据的高地址存储到高地址处。
#include<stdio.h>
int jiance()
{
int i=1;
return (*(char*)&i);
}
int main()
{
int ret=jiance();
if(ret==1)
printf("小端");
else
printf("大端");
return 0;
}
可以通过上述代码测是大端还是小端存储。
3.浮点型在内存中的存储
常见浮点数:
3.12159
1E10
浮点数家族包括:float,double,long double
3.1一个浮点数存储的例子
int n=9;
float *p=(float*)&n;
printf("n的值=&d ",n); 9
printf("*p的值=%f",*p); 0.000000
*p=9.0;
printf("n的值为=%d",n); 1091567616
printf("*p的值为=%f",*p); 9.000000
3.2浮点数存储规则
根据国际标准:任意一个二进制浮点数V可以写成以下形式
(-1)^S*M*2^M
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,1<=M<2.
2^E表示指数位。
举例来说:
十进制的5,写成二进制是101.0(浮点数),相当于1.01x2^2。
那么按照上面的格式,可以得出,S=0;M=1.01;E=2。
十进制的-5,写成二进制-101.0,相当于-1.01x2^2。那么,S=1;M=1.01;E=2。
按照国际规定:
对于32位的浮点数,最高位的1位是符号位S,接着的8位是指数E,剩下的23位是有效数字M。
对于64位的浮点数,最高位的1位是符号位S,接着的11位是指数E,剩下的52位是有效数字M。
前面说过M的取值规定,M可以写成1.xxxxxx的形式,所以计算机内部保存M时,默认这个数的第一位数位1,因此可以省去,等到读取的时候,系统会自动加上1。将1舍去以后,M可以保存24位有效数字。
至于指数E,情况就比较复杂
首先,E作为一个无符号整数
这意味着,如果E位8位,它的取值范围为0~255,如果E位11位,它的取值范围为0~2047.,但是我们知道科学计数法中的E是可以出现负数的,所以,国际规定,存入内存中E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127,对于11位的E,这个中间数是1023。比如,2^10的E是10,所以保存成32位浮点数,必须保存10+127=137,即10001001。
然后,指数E从内存中取出,还可以分为3种情况:
E不全为0或不全为1
比如0.5,需要存储,二进制形式为0.1,由于规定正数部分必须为1,需要将小数点右移一位,则为1.0*2^(-1),其E为-1+127=126,表示为01111110
表示成 0 01111110 00000000000000000000000
E全为0
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值。
有效数字M不再加上第一位的1,而是还原为0.xxxxx的小数。这样做是为了表示+-0,以及接近于0的很小的数字。
E全为1
这时,如果有效数字M全为0,表示+-无穷大(正负取决于S)
相信大家看完文章,那道例题也会做了吧
有疑问的小伙伴也可以评论或者私信我
下次再见芜湖!!!!