数据的存储(C语言)

数据的存储(C语言),第1张

数据的存储
  • 数据的存储
    • 数据类型介绍
  • 类型的基本归类
  • 整型在内存中的存储
    • 原码、反码、补码
    • 大小端介绍
  • 浮点数在内存中的存储

数据的存储 数据类型介绍
内置类型解释
char字符数据类型
short短整型
int整型
long长整型
long long更长的整型
float单精度浮点型
double双精度浮点型
类型的基本归类

整型:

char
unsigned char
signed char
short
unsigned short
signed short
int
unsigned int
signed int
long
unsigned long
signed long

浮点型:

float
double

构造类型:

  • 数组类型
  • 结构体类型 struct
  • 枚举类型 enum
  • 联合类型 union

指针类型:

int *pi;
char *pc;
float *pf;
void *pv;

空类型:
void表示空类型(无类型)
通常应用于函数的返回类型,函数的参数,指针类型。

整型在内存中的存储

一个变量的创建是要在内存中开辟空间的。

空间的大小是根据不同的类型而决定的。

int n=10;
int m=-10;

n分配四个字节的空间,那如何存储?
要想知道怎么存储,首先了解以下概念:

原码、反码、补码

计算机中的有符合数有三种表示方法,即原码,反码,补码。


三种表示方法均有符号位和数值位两部分,符号位都是用0表示正,1表示负,而数值位三种表示方法各不相同。


原码:直接将二进制按照正负数的形式翻译成二进制即可
反码:将原码符号位不变,数值位各位依次取反即可得到
补码:反码+1就是补码
正数的原、反、补码都相同
对于整型来说:数据存放内存中其实存放的是补码。


为什么呢?
在计算机系统中,数值一律用补码来表示和存储。

原因在于,使用补码,可以将符号位和数值位统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程时相同的,不需要额外的硬件电路。


我们来看看n和m时如何存储的:

数字进制原码反码补码
100000 0000 0000 0000 0000 0000 0000 10100000 0000 0000 0000 0000 0000 0000 10100000 0000 0000 0000 0000 0000 0000 1010
10十六00 00 00 0a00 00 00 0a00 00 00 0a
-101000 0000 0000 0000 0000 0000 0000 10101111 1111 1111 1111 1111 1111 1111 01011111 1111 1111 1111 1111 1111 1111 0110
-10十六80 00 00 0aff ff ff f5ff ff ff f6
大小端介绍

什么是大小端:
大端存储模式,指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小段存储模式,指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中;
设计一个算法来判断当前机器是大端存储模式还是小端存储模式?

//判断机器是大端存储还是小段存储
//方式1:
int main()
{
	int a = 1;
	if (0 == *(char*)&a)  //低位是0
	{
		printf("大端存储模式!");
	}
	else    //低位是1
	{
		printf("小端存储模式!");
	}
	return 0;
}
//方式2:
int main()
{
	union 
	{
		int i;
		char c;
	}u;
	u.i = 1;
	if (u.c == 0)
	{
		printf("大端存储模式!");
	}
	else
	{
		printf("小端存储模式!");
	}
	return 0;
}
浮点数在内存中的存储

根据国际标准IEEE754,任意一个二进制浮点数V可以表示成如下形式:

  • (-1)^S*M*2^E
  • (-1)^S 表示符号位,当S=0,V是正数;当S=1,V是负数;
  • M表示有效数字,大于等于1,小于2。

  • 2^E表示指数位。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存