C语言数据存储

目录

一.数据类型的介绍

(1)整形家族

(2)浮点型家族

(3)构造类型

(4)其他

 二.整形在内存中如何进行存储

(1)原,反,补

(2)大小端介绍

(3)练习

三.浮点型在内存中如何进行存储

(1)存储

​编辑​编辑

(2)取出


debug 版本下会死循环

release版本优化后

将代码的效果改变

一.数据类型的介绍

(1)整形家族

 

对于无符号数据类型的每一位都可以作为有效位存储数据

(2)浮点型家族

(3)构造类型

(4)其他

数组根据需求可以变化其元素的类型和数组大小

 二.整形在内存中如何进行存储

(1)原,反,补

原码是数据的真实值

整数在内存里面存放的是补码的二进制序列

而内存窗口显示的是16进制

补码和原码相互转换是相同的,

补码取反(符号位不变)加1得到原码

原码取反(符号位不变)加一得到补码

(2)大小端介绍

剥鸡蛋从大端还是从小端剥

对于一个字节大小的数据,没有字节存储顺序可谈

大小端取决于硬件

如何代码表示机器的硬件的字节存储形式

int main()
{
	int a = 1;
	char* p = (char*)&a;
	if (*p == 0)
	{


		printf("大端");
	}
	else if (*p == 1)
	{

		printf("小端");
	}

	return 0;
}

最好将判断大小端的代码封装成一个函数

(3)练习

int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a = %d,b = %d,c = %d", a, b, c);
	return 0;
}

数据截断是发生在存储数据时

数据在使用的时候,才会进行整形提升,如char ,short 在表达式进行计算时会默认提升为整形

计算机在进行计算的时候都是以缺省整形的方式来进行计算的

注:表达式计算时讲过整形提升,讲操作符的时候

整形提升时,是按原来的数据类型进行提升的

如将char类型的数据以%u的类型打印,那么就按有符号的标准进行提升

有符号数高位全部补符号位对应的数,负数补1,正数补0

无符号数高位全部补0

int main()
{
	char a = -128;
	printf("%u\n", a);
	printf("%d", a);


	return 0;
}

打印无符号整形时,提升后的补码就是原码

而打印有符号整形时,提升后的补码要进行转换成原码
自己算一下

int main()
{
	char a = 128;
	printf("%u\n", a);
	printf("%d", a);
	return 0;
}

 

向上转换

有符号数和无符号数进行计算时,会将有符号数转换为无符号数进行计算

陷入死循环

-1---->4294967295

-2---->4294967294

unsigned char i = 0;
int main()
{
	for (i = 0; i <= 255; i++)
	{
		printf("Akebi\n");
	}
	return 0;
}

unsigned int 不可能小于0

三.浮点型在内存中如何进行存储

(1)存储

小数后面加f的类型时float

小数后面不加f的类型为double

(2)取出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值