C语言-数据在内存中的存储

数据类型

数据类型决定了数据存储所占内存开辟空间的大小。
整形
        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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值