数据怎么存储

一、数据类型的介绍

1、C语言的基本数据类型

char        //字符数据类型
short       //短整型
int        //整形
long       //长整型
long long    //更长整型
float       //单精度浮点型
double     //双精度浮点型

在写代码中,我们会遇到

int a;     	 	// 默认为 signed int 有符号的 int
unsigned int b; // 无符号的 int

// 我们来看看
char c;  	// 取决于编译器,大部分编译器下char 就是 signed char 
short d;   // signed short

这时我们就有个疑问,signed 和 unsigned 有什么区别呢?

unsigned char a = 255;
signed char b = 255;
printf("%d, %d", a, b);

运行之后的结果为 255,-1
为什么会这样呢
unsigned char在内存中占用1个字节 也就是八位,255 的 二进制为 1111 1111,因为是无符号的char,所以 1111 1111 的高位不是符号位。
signed char b = 255; 这时的 1111 1111 高位是符号位
在这里插入图片描述
2、构造类型

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

3、指针类型

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

4、空类型

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

5、浮点数存储规则
根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式

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

二、原码、反码、补码

计算机中的整数有三种表示方法,即原码、反码和补码
三种表示方法均有符号位和数值位两部分,符号位都是用0表示 正数,用1表示 负数

那么正数和负数的原码、反码和补码有什么区别呢

正数
原反补都是一样的。

负数
原码 直接将数值转化为二进制
反码 除了符号位不变,数值位依次取反
补码 反码+1就是补码

数据在存储中为什么是以补码的形式存储
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值位统一处理
同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路

三、大小端

int a = 0x11223344

在这里插入图片描述
在这里插入图片描述

小端字节序存储:把一个数据的低位字节的内容存放在内存的低地址处,低高字节的内容存放在内存的高地址处
大端字节序存储:把一个数据的低位字节的内容存放在内存的高地址处,高位字节的内容存放在内存的低地址处
由图可知我的编译器是采取小端存储模式

检验当前编译器是什么端?

int main()
{
	int a = 1;
	char* p = (char*)&a;
	if (*p == 1)
		printf("小端");
	else
		printf("大端");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT自习小空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值