C语言之数据的存储(整型数据)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言之数据的存储(整型数据)相关的知识,希望对你有一定的参考价值。
一、整型数据在内存中的存储
1.1整型数据家族
char,short,int long(每种类型又分为unsigned 和signed,例如,signed char,unsigned char)
1.2整型数据的存储
对于整型数据,其在计算机内存当中,存储的是整型数据的补码
但是对于不同类型的电脑,其补码的存储方式也是不同的,按照存储方式的不同,可以分为大端存储模式和小端存储模式
大端存储模式是指数据的低位存储在内存中的高地址中,而数据的高位存储在内存中的低地址中
而小端存储模式是指数据的低位存储在内存中的低地址中,而数据的高位存储在内存中的高地址中
对于某个数据,例如int a=0x00000001,这是1的补码,0x表示它是16进制,在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,也就是8个比特位,a是4个字节的数据,每个字节的数据都会存放在一个地址单元中,对于a,从右到左,字节依次提高,例如0x01是它的低字节,0x00是高字节,所以对于大端模式来说,a在内存中的存储形式是:00 00 00 01
二、整型数据的存储范围
对于unsigned类型的数据,其存储范围是0 ~ ( 2^n - 1 ),而signed类型的数据,其存储范围是- (2^(n-1)) ~ + (2^(n-1) - 1),
例如unsignd char 类型数据的存储范围为0~255,signed char类型数据的存储范围为-128~127
三、例题分析
unsigned char i = 0;
int main()
for(i = 0;i<=255;i++)
printf("hello world\\n");
return 0;
很显然,unsigned char的类型数据,存储范围为0~255,所以i的范围始终在这之内
,那么当i等于255的循环执行完成后,i++后会是多少呢,答案是0,这是一个死循环
那么该如何理解呢,对于unsigned char 类型,0的补码为00000000,不断+1,一直
到255,补码为11111111,此时255再加1,其补码变为100000000,char类型只能保存
后8个比特位的数据,即00000000,也就是0
int main()
char a[1000];
int i;
for(i=0; i<1000; i++)
a[i] = -1-i;
printf("%d",strlen(a));return 0;
a[i]的取值范围为-128~127,在循环中,a[i]从-1一直到-128,-128再次-1是多少呢
-128的补码为11111111 11111111 11111111 10000000,被赋给char类型的a[i],
只能存储末尾八个比特位,即10000000,-1后的补码为,011111111,显然是127的补码
从127再次--,直到遇到0,strlen函数停止,所以答案为128+127=255
四、查询整型家族存储数据范围
储存在一个叫 limits.h 的文件当中,可以用一个叫做Everything的软件直接搜索limits.h,将其中一个拖动到我们的vs项目中去,在这里我们可以找到我们需要的存储范围
以上是关于C语言之数据的存储(整型数据)的主要内容,如果未能解决你的问题,请参考以下文章