不同的数据类型代表了不同数据在内存中开辟的空间大小 eg:int 在内存中占4个字节
| 整 型 | 内容 注意:括号中的内容为每种类型所占的字节数 |
|---|---|
| 数据类型 | char(1字节) short(2字节) int(4字节) long(8字节) |
| 浮点型 | float (8字节) double(16字节) |
| 构造类型 | 数组类型 (内存大小自己开辟决定) 结构体 struct (遵守内存对齐) 枚举 enum(内存元素决定) 联合类型 union(最大的那个元素的) |
| 指针类型 | void 表示类型,通常用于函数的返回类型,函数的参数,指针类型 |
C语言没有字符串类型,所以用数组来存放字符串 eg:char[10]="abcdef"二.整型数据在内存中的存储 1.源码,反码,补码
计算机中的符号已二进制的形式在内存中存储 数据在内存中已补码的形式存储 首位为符号位,其余位为数据位 0为正,1为负
源码:直接二进制按照正负数的形式翻译二进制即可
反码:符号位不变,数据位置取反
补码:反码+1
正数:源码=反码=补码
负数:以补码形式存储
eg: 正数 date:10 bin:00000000 00000000 00000000 00001010 源码=反码=补码=00000000 00000000 00000000 00001010
负数 date:-10 bin: 10000000 00000000 00000000 00001010 反码:11111111 11111111 11111111 11110101 补码:11111111 11111111 11111111 111101102.数据在内存中已补码的形式存储的原因
a.使用补码可以将符号位和数据域统一处理
b.CPU只有加法器,使用补码可以使加法和减法统一处理
3,数据存储字节序:
概念:cpu对内存中的数据以字节为单位进行存取的顺序
因为内存的有高低地址之分,数据的二进制有高低位之分
主机字节序主要取决于cpu架构: X86-小端; MIPS-大端
字节序主要是在网络通信时,不同主机之间的通信,如果字节序不同会造成数据二义
分类:int=0x11223344
大端存储:低地址存高位 内存中的存放11 22 33 44
小端存储:低地址存低位 内存中的存放44 33 22 11
注:大小端在面试和考试中是高频考点,想要了解更多点击下方链接了解。
http://t.csdn.cn/q270n
三.浮点型数据在内存中的存储 1,IEEE754 标准文档规定,任意一个浮点数在内存中的表示分三部分| 符号 | 单精度浮点数每一位所占内存 | 双精度浮点数每一位所占内存 |
|---|---|---|
| s—符号位 | 1个比特位 | 1个比特位 |
| E—指数位 | 8个比特位 | 11个比特位 |
| M—尾数 | 23个比特位 | 52个比特位 |
浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占 1 位二进制,表示数的正负。0表示正,1表示负
指数符占 1 位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx, 但不存开头的 0 和点。
指数存指数的有效数字。
指数占多少位,尾数占多少位,由计算机系统决定。
2.取值范围两种特殊情况:
E为全0:这时候真实指数值是1-127=-126,M表示真实值,通常用于表示正负0
E为全1:这时候真实指数值是255-127=128,M为全0时表示正负无穷大
| 类型 | 比特数 | 有效数字 | 数值范围 |
|---|---|---|---|
| float | 32 | 6-7 | -3.410(-38)~3.410(38) |
| double | 64 | 15-16 | -1.710(-308)~1.710(308) |
| long double | 128 | 18-19 | -1.210(-4932)~1.210(4932) |
如果存储比精度更重要,请考虑对浮点变量使用 float 类型。相反,如果精度是最重要的条件,则使用 double 类型。
浮点变量可以提升为更大基数的类型(从 float 类型到 double 类型)。当您对浮点变量执行算术时,通常会出现提升。此算术始终以与具有最高精度的变量一样高的精度执行。
float f_short; double f_long; long double f_longer; gf_short = f_short * f_long 在前面的示例中,变量f_short提升到类型 double 并且与f_long相乘;然后,结果舍入到类型 float,然后赋给f_short。3.应用示例分析
在 C 和 C++ 中,如下赋值语句:
float a=0.1;
编译器报错:warning C4305: ‘initializing’ : truncation from 'const double ’ to 'float ’
原因:在 C/C++ 中,上述语句等号右边 0.1,认为是个 float,但是编译器却把它认为是个 double(因为小数默认是 double),所以要报这个 warning,一般改成0.1f就没事了。
欢迎各位来交流,如果觉得有用的话,记得评论+收藏+关注哦!喵~~
今日垃圾话:长大之后才明白,世上无难事,只怕有心人。



