数据存储

132 阅读4分钟

目录:

第一点:数据类型的归类 第二点:1.大小短字节数据存储问题;2.如何判断自己的机器是大端还是小端? 第三点:unsigned与signed的区别;画出象限坐标表示 第四点:题型讲解;123; 第五点:浮点数在计算机中的存储;

1.数据类型:

char1字节字符型
short2字节短整型
int4字节整型
long4/8字节长整型
long long8字节长长整型
float4字节单精度浮点型
double8字节双精度浮点型

大小端存储问题

小端存储:低字节位存储在低地址,高字节位存储在高地址

大端存储:低字节位存储在高地址,低字节位存储在低地址 画图演示: 画图板.jpg

//判断机器大小端
#include<stdio.h>
int check_sys()
{
	//判断机器大小端
	int i = 1;
	char* p = (char*)&i;
	return *p;
}
int main()
{
	
	
		int ret = check_sys();//ret==1为小端存储;ret==0为大端存储
		if (ret == 1)
		{
			printf("小端");
		}
		else
			printf("大端");

		return 0;
}

运行结果: image.png

unsigned与signed的区别:

画图演示:

题型讲解:

#include <stdio.h>
int main()
{
	char a = -128;
	//1000000000000000000000000010000000   原码
	//1111111111111111111111111101111111   反码
	//1111111111111111111111111110000000   补码
	//因为要char类型,只有一个字节的空间;会发生截断
	//10000000
	//   %u   以无符号十进制整型打印
	//所以会发生整型提升,又因为char类型为(signed cahr)所以最高位为符号位,故整型提升后结果为
	//1111111111111111111111111110000000
	//   以%u打印,以无符号位打印,所以结果为
	//4294967168
	printf("%u\n", a);
	return 0;
}
#include <stdio.h>
int main()
{
	char a = 128;
	//00000000000000000000000010000000
	//发生截断
	//10000000
	//以  %u  打印发生整型提升
	//11111111111111111111111110000000
	//结果是
	//4294967168
	printf("%u\n", a);
	return 0;
}
int main()
{
	int i = -20;
	//10000000000000000000000000010100  -20
	//11111111111111111111111111101011
	//11111111111111111111111111101100  补码
	unsigned int j = 10;
	//00000000000000000000000000001010  10
	printf("%d\n", i + j);
	//11111111111111111111111111101100  补码
	//00000000000000000000000000001010  10
	//11111111111111111111111111110110   结果的补码(以  %d  形式打印,看成有符号数,故最高位为符号位)
	//11111111111111111111111111110101   结果的反码
	//10000000000000000000000000001010   结果的原码
	return 0;
}
int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d", strlen(a));
	return 0;
}

五.浮点数在内存中的存储: 根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^S:表示符号位,当S=0,V为正数;当S=1,V为负数。 M:表示有效数字,大于等于1,小于2。 2^E:表示指数位