目录
数据的基本内置类型
- char //字符数据类型 1byte
- short //短整型 2byte
- int //整型 4byte
- long //长整型 4byte
- long long //更长的整型 8byte
- float //单精度浮点型 4byte
- double //双精度浮点型 8byte
数据的分类
1.整型
char
unsigned char //无符号字符型
signed char //有符号字符型
short
unsigned short //无符号短整型
signed short //有符号短整型
int
unsigned int //无符号整型
signed int //有符号整型
long
unsigned long //无符号短整型
signed long //有符号短整型
long long
unsigned long long //无符号短整型
signed long long //有符号短整型

2.浮点型
float
double
3.构造类型
数组
结构体
联合体
4.指针类型
int* pa;
char* pb;
float* pc;
voide* pd;
5.空类型
常用于函数的返回类型和参数,指针类型
数据的储存
计算机中整数的表示方法有三种;原码、反码、补码。
其中对于正整数而言,他的原码,反码和补码是相同的。
让我们用实例进行探究。
int a=20;
其中20是属于 int 类型,已知 int 型在内存空间中消耗4个字节,也就是32个比特位,因此20在内存中的二进制序列为下;

如果 int a=-20;

现在我们已经知道了原码,反码和补码的二进制数列,那么数据在内存中是以什么形式存在的呢?
我们以一个简单的数据处理进行判断;
计算(-1)-2的值
因为计算机处理数据时没有减法
所以计算机处理的数据应该是 (-1)+(-2)
假设他们是以原码的形式储存
-1的原码
1000 0000 0000 0000 0000 0000 0000 0001
-2的原码
1000 0000 0000 0000 0000 0000 0000 0010
相加得到
0000 0000 0000 0000 0000 0000 0000 0011
符号位的1与1相加,离开了内存空间,结果为3
所以不是以原码储存的
同理
-1的反码
1111 1111 1111 1111 1111 1111 1111 1110
-2的反码
1111 1111 1111 1111 1111 1111 1111 1101
(-1)+(-2)
1111 1111 1111 1111 1111 1111 1111 1011
-3的反码应该是
1111 1111 1111 1111 1111 1111 1111 1100
所以数据在内存中的储存方式也不是反码
那补码呢?
-1的补码
1111 1111 1111 1111 1111 1111 1111 1111
-2的补码
1111 1111 1111 1111 1111 1111 1111 1110
相加
1111 1111 1111 1111 1111 1111 1111 1101
对补码进行取反加一得到原码
1000 0000 0000 0000 0000 0000 0000 0011
结果为3,由此可知,整型数据在内存中储存的方式为补码;
对于浮点型数据呢?
首先来看一段代码

你认为这串代码的结果是什么呢???
答案揭晓

和你预想中的结果一样吗?根据这串小小的代码,相比我们就可以发现,浮点型数据的储存类型是完全不同与整型数据的。
十进制;5.5
可以转化为
二进制;101.1
浮点数的储存分为三个部分
(-1)^s * M * 2^E
二进制为101.1
(-1)^0 * 1.011 * 2^2
s=0 M=1.011 E=2
由于M一定是一个大于等于1,小于2的存在,所以M的第一位不在内存中储存,这样可以节省一位有效数字。
由于E是一个无符号整型,这意味着,如果E为8位,它的取值范围为0~255,如果E为11位,它的取值范围为0~2047。但是,我们 知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间 数是1023。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即 10001001。
对于32位浮点数来说,S E M 的分布如下

对于64位(double)型浮点数而言

那么我们又该怎样取出浮点数呢?
在取出浮点数时,我们不经要在M的最前面加上一个1,用S来判断浮点数的正负。对于E,我们需要考虑三种情况。
如果你能看到这里,我真的很感谢。如果能点个赞再走,那就更好了。
我是个刚刚接触C语言的萌新,如果有纰漏之处,还请大佬斧正。谢谢大家支持!
本文详细探讨了C语言中数据类型的基础知识,包括整型、浮点型的分类、内在表示和储存方式。重点分析了整型数据在内存中以补码形式储存,并解释了浮点数的存储结构,如32位和64位浮点数的布局。同时,通过实例解释了如何从内存中取出浮点数。
496

被折叠的 条评论
为什么被折叠?



