数据在内存中的存储

1.大端序和小端序
数据在内存中存储的字节顺序不同,其中大端序是符合平时的习惯,将数据的高字节部分存储于低地址,将低字节部分存储于高地址中.如0x11223344在内存中的实际存储情况是从某个地址开始为:11 22 33 44.而小端序则相反.

 如何判断是大端序存储还是小端序存储?

可以根据大小端序存储的区别,将一个实际数据存入内存中,如a = 0x11223344,通过查看在内存中变量a起始的第一个字节的内容是11(大端序),还是44(小端序)来判断.可以通过将int指针强转成char指针,进一步获取第一个字节的内容.

int a = 0x11223344;
	int *p = &a;
	char *p2 = (char *)p;
	printf("%x\n", *p2);//输出结果为44(为小端序存储)

2.整数类型的数据在内存中的存储
在内存中,数据的存储为补码形式。其中,分为无符号整数和有符号整数。无符号整数表示非负数,直接存储其十六进制形式。而有符号整数需要将最高位作为符号位(0正1负)。
3.整数的类型转换
整数在作表示数的范围大的类型向小范围的类型转化时,采取的是截断的方法。在作小范围向大范围的类型转换是采取的是“高位补符号位的办法”,因此在类型转换中可能导致数据的大小发生变化。

	char a1 = -1;
	signed char b1 = -1;
	unsigned char c1 = -1;
	printf("a1 = %d,b1 = %d,c1 = %d\n", a1, b1, c1);
	//输出结果为 -1 -1 255
	char a2 = -128;
	printf("%u\n", a2);//输出为4294967168
	char a3 = 128;
	printf("%u\n", a3);//输出4294967168
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值