首页 > 其他分享 >C语言之数据的存储(一)(整型数据)

C语言之数据的存储(一)(整型数据)

时间:2023-03-10 21:37:14浏览次数:38  
标签:存储 补码 unsigned C语言 char 整型 数据

一、整型数据在内存中的存储

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语言之数据的存储(一)(整型数据)_补码

C语言之数据的存储(一)(整型数据)_数据_02






标签:存储,补码,unsigned,C语言,char,整型,数据
From: https://blog.51cto.com/u_15466618/6113498

相关文章

  • Qz学算法-数据结构篇(排序算法--插入、希尔)
    插入排序1.基本介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2.基本思想插入排序(InsertionSorting).的基本思想是......
  • 初识C语言3/10
    循环语句:while循环:#include<stdio.h>intmain(){inti=1;while(i<=10){if(i==5)break;printf("%d\n",i);//1,2,3,4,5......
  • 数据库内核:VScode远程调试
    准备虚拟机这里我使用Docker的Ubuntu的镜像去创建容器。下载Ubuntu镜像dockerpullubuntu:20.04创建子网创建容器时需要设置固定IP,所以先要在docker中......
  • 明解数据库------数据库存储演变史
    一、文件系统存储计算机刚开始出现的时候,那时候没有硬盘,只有内存,数据不会进行存储,一般只用于科技计算,计算完输出结果后,程序就撤出内存了。后来随着技术发展,有了硬盘、文......
  • JAVA多线程处理大量数据(二)--推荐
    背景说明:要对服务器上一个目录进行全量文件读取1、多线程执行类--FileThreadUtils.javaimportcn.hutool.core.collection.CollUtil;importcn.hutool.core.io.FileUti......
  • 书籍数据科学技术与应用_神经网络
    Sklearn模块无监督:cluster(聚类)、decomposition(因子分解)、mixture(高斯混合模型)、neural_network(无监督的神经网络)、covariance(协方差估计)有监督:tree(决策树)、svm(支持向量......
  • 数据推介⎮情感语音合成音库
    在语音交互领域,语音合成是重要的一环,其技术也在不断发展。近年来,人们对情感合成的兴趣和需求越来越高。情感语音合成会让机器如真人一样和我们交流,它可以用愤怒的声音、开心......
  • JDBC--java连接数据库
    什么是JDBCJDBC(javadatabase.connective)它是一套用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种规......
  • 使用PostgreSQL而不是MySQL存储中型数据有什么好处?
    我可以明确地回答.我们之所以选择Postgres,是因为它在操作上比MySQL更可靠,而当时公司的创始人相信SQL数据库的可移植性.随着年份的发展,我们发现了这一点,我们发现基本上,Post......
  • java-IO-字节流读数据(一次读一个字节数组数据)
         ......