整型数据在内存中的存储

主要内容:本文主要介绍C语言中的整型数据在内存中的存储。

本文需要整型提升部分的知识,若需要可浏览此文:【待补充】
同时,有浮点型数据在内存中存储的详解:浮点型数据在内存中的存储

一、大小端存储

计算机有两种存储方式,大端存储模式和小端存储模式
大端存储模式:数据的低位保存在内存的高地址中,高位保存在内存的低地址中
小端存储模式:数据的低位保存在内存的低地址中,高位保存在内存的高地址中
以数据11223344为例,大端存储和小端存储如下图所示:
大小端存储
我们如何判断自己的计算机使用的是大端存储还是小端存储呢?可以通过下面这段代码进行判断:

#include <stdio.h>
int main(){
	int a=1;
	char* p=(char*) &a;//取出a所存储的地址的第一个字节
	if(*p==1) printf("小端存储");//若第一个字节存储的是01
	else printf("大端存储");//若第一个字节存储的是00
	return 0;
}

判断大小端存储

二、整型在内存中的存储

有符号整型在内存中是以补码形式进行存储的,关于无符号整型在内存中的存储有什么需要注意的是有符号整型到无符号整型的转换。此处以例子讲解。

1、例1:-128转换为无符号整数
#include <stdio.h>
int main(){
	char a=-128;
	printf("%u\n",a);//%u打印十进制无符号数字
	return 0;
} 

运算过程:
-128转换为无符号整数
由此可见,整型数据在存储时,要将二进制原码转化为补码存储。在输出时,要将补码转化为原码输出。

2、无符号数的范围

我们都知道,一个有符号字节的表示的范围是-128~127,一个无符号字节的表示的范围是0~255。那么,在使用无符号数和有符号数的时候有什么需要注意的呢?
看以下代码:

#include <stdio.h>
int main(){
	unsigned int i;
	for(i=9;i>=0;i--) printf("%u\n",i);
	return 0;
}

此代码死循环,原因是i为无符号整数,无符号整数永远>=0。以1个字节为例子。数与数之间的关系如下图所示。

可以理解为一个钟表,在时钟上,0点的下一个是1点、1点的下一个是2点… … 11点的下一个是12点、12点的下一个又回到了0点
以1个字节为例子,0000 0000的下一个是0000 0001 … … 1111 1111的下一个又回到了0000 0000

上面那段代码,就是一个逆时针转的时钟,9-1=8、8-1=7… …0-1= ( 11111111111111111111111111111111 ) 2 (11111111 11111111 11111111 11111111)_{2} (11111111111111111111111111111111)2… …
数的循环

3、有符号数的范围
#include <stdio.h>
int main(){
	char a[1000];
	for(i=0;i<1000;i++) a[i]=-i-1;
	printf("%d",strlen(a));
	return 0;
}

与无符号数的范围一样的道理,有符号数是从-128~127的一个钟表盘。
a[0]=-1、a[1]=-2、a[2]=-3… …a[127]=-128、a[128]=127、a[129]=126… …a[253]=2、a[254]=1、a[255]=0
0在ASCII码表中对应’\0’,strlen读取到’\0’结束。所以输出结果为255。
有符号数表盘
本文为个人学习总结所得,如有错误欢迎指正。
你的点赞将为我带来很大的鼓励。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HePingxxb

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

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

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

打赏作者

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

抵扣说明:

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

余额充值