首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >数据存储(整型)与打印

数据存储(整型)与打印

作者头像
用户11719974
发布2025-11-15 08:48:00
发布2025-11-15 08:48:00
590
举报

数据类型可以分为两大家族,一个是整型家族(int,short,char,long...),另一个是字符型家族(float,double,long double...),接下来先给大家讲一下整型家族的数据存储。

注:char本质是ASCll码值,划分为整型家族。

1.补码的理解

我们都知道计算机是只能识别二进制的,也就是1和0(分别是高电平和低电平)。 而这些数据类型最终都会被转化为二进制的补码存储,使用补码存储的好处在于,使CPU在对这些数据进行运算时得到了简化,要知道CPU是不能进行减法运算的,那么它是怎么实现两个数相减呢?

举个例子2-1,可以转化为2+(-1)结果是相同的

也就是2和-1的二进制的补码相加,那么补码是怎样实现这样的运算,用到了一个溢出原理,我们想象一个时钟,

e175df1edf51441bb5aa603941f2d371.png
e175df1edf51441bb5aa603941f2d371.png

一共有12个点,11点加2得到的是1而不是13,那么比如9-4可以写为9+8.

补码运算就是用到这个原理,可以大概这么理解。

2.整型提升

讲了存储,接下来是如何打印的问题,如何存储是由计算机来决定的,而怎样打印是由程序员自己来决定的,一个数,我们比如可以打印%o,%d,%x,%c,%s,%f...但这个过程总会出现一些问题,来看下面一个例子

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	char a=-1;
	signed char b=-1;
	unsigned char c=-1;
	printf("a=%d,b=%d,c=%d",a,b,c);
	return 0;

运行结果为:

35cd803b07dd4c55b1a64e1764132cfa.png
35cd803b07dd4c55b1a64e1764132cfa.png

char类型只能向内存申请一个字节的空间,而%d是对四个字节的空间进行打印,就需要进行整型提升(请记住这个概念)那么就需要将一个字节提升到四个字节,有以下几个步骤 :1.先看字节大小是否相同,需要补多少字节,2.看这个数申请的内存是有符号还是无符号,无符号直接补0,若有符号看它的二进制补码最高位是0还是1,是0的话往前三个字节全部补0,若为1前三个字节全部补1。

3.到了打印时候会看要以什么形式打印,比如看它是否有符号(比如%d为有符号,%u为无符号),有符号的话最高位当做符号位打印,无符号直接打印,那么上面的结果就能很容易的理解了。

3.截断

char类型只能申请一个字节,而一个数字占四个字节存不下,只能把二进制补码的高位截去三个字节,留下一个字节存入。

代码语言:javascript
复制
#include<stdio.h>
#include<limits.h>
int main()
{
	char a = 1, b = 128;
	printf("char能存储的最大值%d\n", CHAR_MAX);
	printf("a=%d b=%d\n", a, b);
	return 0;
}

结合整型提升就能想到以下运行结果:

b37b491e361c45e9b97844f4acf47594.png
b37b491e361c45e9b97844f4acf47594.png

点击下面链接了解浮点型存储

浮点数在计算机中的存储机制详解,-CSDN博客

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.补码的理解
  • 2.整型提升
  • 3.截断
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档