数据类型
数据类型决定了数据存储所占内存开辟空间的大小。
整形
unsigned/signed int
unsigned/signed char
unsigned/signed short
unsigned/signed long
浮点型
unsigned/signed float
unsigned/signed double
构造类型
>数组类型
>结构体类型 struct
>枚举类型 enum
>联合体类型 union
指针类型
int*
char*
float*
void*:
表示空类型,通常应用于返回类型,函数参数,指针类型
整形在内存中的存储
原码,反码,补码
正数的原码反码补码都相同;
负数的反码是原码除符号位外按位取反;
负数的
补码是反码+1
;
整数数据存放在内存中的形式是补码。
数据在内存空间中为什么“倒着存”?
大小端介绍
大端(存储)模式,是指数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址
中
小端(存储)模式,是指数据的低位保存在内存的低地址中,数据的高位
保存在内存的高地
址中
浮点型形在内存中的存储
浮点型的存储形式:
(-1)^s * m * 2^e
32位下浮点型存储的例子:
说明在内存中整形的存储方式与浮点型存储方式是不一样的
int main()
{
int n = 9;
//float 类型(32位)的 S M E 存储空间分别为:1bit 8bit 23bit
float* p = (float*)&n;
//0000 0000 0000 0000 0000 0000 0000 1001 - 9的补码
//0 00000000 00000000000000000001001
// s = 0
// m = 0.00000000000000000001001
// e = -126 (1-127)
// = (-1) ^ 0 * 1.001 * (-20) * 2 ^ (-126)
// 0000 0000 0000 0000 0000 0000 0000 0000
// = 0.000000
printf("n的值为:%d\n", n);
printf("*p的值为:%f\n", *p);
*p = 9.0;
// 9.0
//= 1001.0 - 转化为二进制
//= 1.001 * 2 ^ 3 - 二进制的科学计数
//= (-1) ^ 0 * 1.001 * 2 ^ 3 - 补符号位
// s = 0
// m = 1.001
// e = 3 (+127)
//0 10000010 0010000000000000000000
//0100 0001 0001 0000 0000 0000 0000 0000 - 原码,反码,补码
// %f - 9.0
printf("num的值为:%d\n", n);
printf("*p的值为:%f\n", *p);
return 0;
}