数据在内存中的存储

数据类型介绍

c语言数据类型介绍

c语言中数据主要分为两种,整型和浮点型,需要注意的是char类型虽然称作字符型但是存储的依然是整型数据,是将字符的asc码存储在其中的。

整型

c语言中整型主要分为

char(字符型)
 unsigned char
 signed char
short(短整型)
 unsigned short [int]
 signed short [int]
int(整型)
 unsigned int
 signed int
long(长整型)
 unsigned long [int]
 signed long [int]

这几种
其中每一种都具有无符号和有符号两种。

浮点型

float
double

构造类型

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

指针类型

int* p
char* p
float* p
void* p

原码,反码,补码

整数在计算机中的表示有三种方法,即原码反码补码,其中都分为符号位于数值位,符号位用‘0’表示正数,用‘1’表示负数。

进制

2进制,8进制,10进制,16进制都是数值的不同表示形式,其规则可以拿在生活中最常见的十进制举例。
如十进制中的5这个数字,其各位为5,表示个位的‘重量为5’,而十进制个位的值为‘10^0’,为1,即1*5。
同理可以得到十进制数字5的二进制表示形式,为101.
在这里插入图片描述
计算过程如图。

原码,反码,补码

原码
直接将二进制按照正负数的形式翻译为二进制

反码
将原码的符号位不变,其它位按位取反

补码
反码+1得到

举例

如十进制5的原码补码反码
00000000000000000000000000000101 --原码
011111111111111111111111111111111010 --反码
011111111111111111111111111111111011 --补码

在计算机中数据的储存和表示一律使用补码,补码在使用是可以将符号位和数值位一起处理。

举例

20---
00000000000000000000000000010100--原码
00000000000000000000000000010100--反码
00000000000000000000000000010100--补码

-10
10000000000000000000000000001010--原码
11111111111111111111111111110101--反码
11111111111111111111111111110110--补码

将20与-10进行相加。

如果使用原码进行相加的话

00000000000000000000000000010100
10000000000000000000000000001010
进行相加
10000000000000000000000000011110
为
-30

如果使用补码进行相加

00000000000000000000000000010100
11111111111111111111111111110110
进行相加
00000000000000000000000000001010
为
10

可以得出,在计算加法时如果使用原码无法将符号位和数值位统一进行处理,而使用补码进行计算时可以将符号位和数值位统一进行处理。

数据的存储顺序

大端字节序存储

把一个数据的高位字节序的内容存放在低地址处,把低位字节序的内容存放在高地址处。

11 22 33 44->11 22 33 44

小端字节序存储

把一个数据的高位字节序的内容存放在高地址处,把低位字节序的内容存放在低地址处。

11 22 33 44->44 33 22 11

大小端相关计算

使用代码判断计算机储存数据的方法
#include <stdio.h>
int check_sys()
{
	int i = 1;
	return (*(char*)&i);
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

原理

定义一个整型数据,‘1’
二进制为
00000000000000000000000000000001
对这个数据取地址时,将其强制类型转化为char类型,这样就可以只取第一个字节的数据,为1为小端,为0为大端。
不进行强制类型转化时会解引用四个字节的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值