前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一个变量在内存中是如何存储的

一个变量在内存中是如何存储的

作者头像
小明爱学习
发布于 2020-05-12 02:58:09
发布于 2020-05-12 02:58:09
3K0
举报
文章被收录于专栏:smh的技术文章smh的技术文章

我们自学习一门高级语言时,都要了解数据成分,可你们知道在高级语言中数据都是如何在内存中存储的吗?今天我就来介绍一下。

语言:C++

int c=-123;

这只是一个简单的定义了一个变量,变量名为c,值为-123。

然而我们大家应该都知道,计算机存储数据都会以二进制的形式来存储。

然后一个int在一般情况下都计算机都占4个字节,也就是32个bit。某些比较老的编译器int只占16个bit。

其次这还是一个有符号的int类型,所谓有符号,就是这个int可表示负数。因为有符号,所以必须拿出一个bit来当作符号位,那么表示数据的位数也就只有31位了。

转换过程:

首先确定符号位,这是一个负数,所以符号位为1,在数据最前面,然后把123转为二进制为:1111011,123占了7个bit,还剩下24个bit都用0补齐。

得出的原码就是:

通过原码得到反码,反码就是在原码的基础中,取反,如果原码的值为0,就变为1,如果值为1就变为0,符号位不变。

最后通过反码得到补码,补码就是在反码的基础加1即可。

然后变量c在内存就占了四个字节,对应的就是上面的补码。

然后接着谈无符号的int。

unsigned int c=123;

要声明一个无符号的int变量,只需要在int前面加上unsigned即可,这样这个int变量只能表示正数,不能表示负数,这样就不用单独拿一个bit出来当作符号位,这样32个bit都用来表示数据,所以无符号的int型可表示的正数范围也更大。

转换过程:

这是无符号的类型,所以不需要确定符号位,直接把123转为二进制为:1111011,占用了7个bit,其余的25个bit用0补齐。

得出的原码就是:

这里说明一下:如果是无符号数,即原码就是补码,不需要和有符号数那样进行多次的转换,内存中存储的就是原码。

用例子来证明一下:

变量test为无符号int变量,变量test1为有符号int变量,变量test2为无符号int变量。

然后把12和-13相加,很明显大家都知道是-1,但是我们来看看结果:

结果却不是-1,我们来分析一下。

首先-13加12肯定是-1,因为有负号,所以是一个有符号int型的数值。

所以就要求出这个数的补码,我上面说过,有符号数,在内存中存储的都是补码。

首先是一个符号,符号位为1,然后1的二进制就是1,还剩下30个bit用0补齐。

得到原码:

然后根据原码得到反码(过程上面有,不在赘述):

然后根据反码得到补码:

由于我们test2是一个无符号的int型变量,所以他就把这个32个1直接转为了10进制,也就是

看到这里,我相信大家应该明白了变量是如何在内存中表示的,以及有符号和无符号变量的区别了吧。

注意:只有当数值为负数时,在内存中才会存补码形式。

比如:int i=124;

虽然我定义的一个有符号型的int变量,但是由于i是一个正数,所以在内存中的存储形式为原码:

唯一和无符号不同的是,就是最高位是符号位,不能用于来存储数值。

我们用二进制的形式来做个加法,让各位更直观的理解。

-15+10=-5;

这里我只有8个bit来表示。

首先把-15转为补码为:11110001,然后10的补码(也就是原码,因为10是正数):00001010

得到的二进制结果就是

由于最高位是1,所以是个负数,所以这就是个补码的形式的二进制,我们需要将补码转为原码,才可以得到最后的结果。

补码转原码的方法跟上述一样,先取反,然后加1,得到: 0 0 0 0 0 1 0 1,转为十进制就等于5

通过上述一个程序例子,和这个加法的例子,我相信各位应该了解了吧。

后面的文章我会解释,为什么要存在补码形式,都用原码不是更方便吗?

各位再见。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
整数、浮点数在计算机中的存储
  计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。要想学习编程,就必须了解二进制,它是计算机处理数据的基础。
mukekeheart
2019/09/29
1.9K0
整数、浮点数在计算机中的存储
【C数据存储】整型在内存中的存储(进阶版)
0000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 1111 也就是0到255
MicroFrank
2023/01/16
1.3K0
【C语言进阶】整型在内存中的存储
 在日常敲代码的过程中,我们经常会使用整型常量来对变量进行赋值,但我们可能却没有考虑过不同的变量到底是如何存入内存中!今天俺来和大家一起探究一下其中的奥秘。
The sky
2023/04/12
1K0
【C语言进阶】整型在内存中的存储
【C】数据在内存中的存储
有些数值: 只有正数没有负数(年龄)用unsigned 有正有负(温度)用signed
阿伟@t
2023/10/10
2470
【C】数据在内存中的存储
数据在内存中的存储之整数存储
整数的2进制表示方法有三种,即原码、反码和补码 三种表示方法均有符号位和数值位两部分,符号位都是0表用示“正”,用1表示“负”,而最高的一位是被当做符号位,剩余的都是数值位。 正整数的原、反、补码都相同。 负整数的三种表示方法各不相同。
用户11328191
2024/10/23
2390
数据在内存中的储存
前言:现实世界是一个充斥着数据的世界,万事万物身上都充满着数据的存在,比如我们人身上就有身高,体重,年龄等数据。 我们所学的C语言就是用来处理现实中的中的问题,自然而然C语言中必有存储这些数据的盒子,每种数据都有与之对应的盒子,这样方便管理与存储,接下来我们就来深究数据在内存中的存储。
用户10517932
2023/10/07
4110
数据在内存中的储存
数据在内存中的存储
有符号的整数均由符号位和数值位构成,符号位为‘0’表示正,用1表示负,最高位被当作为符号位,剩余的位数为数值位。
熬夜学编程的小王
2024/11/20
1370
数据在内存中的存储
整型在内存中的存储
char unsigned char signed char short unsigned short [int] signed short [int] int unsigned int signed int long unsigned long [int] signed long [int] 或许有朋友会疑问,为什么char是整型家族的?它不是字符型的吗,那是因为
大海里的番茄
2024/01/19
1860
整型在内存中的存储
【C语言】数据在内存中的存储
不同的数据在内存中的存储形式是不同的,而当我们掌握数据在内存中的存储形式之后,会帮助我们更加了解计算机深层工作原理 废话不多说,我们接下来直接进入正题
举杯邀明月
2023/04/12
1.1K0
【C语言】数据在内存中的存储
数据在内存中的存储
对于有符号的整数,这三种表示方式的有符号位和数值位,符号位用0表示正,用1表示负,用二进制最高位来表示符号位,其他都是数值位。
星辰与你
2024/10/17
1700
数据在内存中的存储
【C语言内功】“数据在内存中的存储“
运行结果:死循环(i>=0恒成立)
YY的秘密代码小屋
2024/01/22
1580
【C语言内功】“数据在内存中的存储“
C语言进阶—深度剖析数据在内存中的存储
字符在内存中存储的是字符的ASCII码值,ASCII码值是整型,所以字符类型归类到整形家族中
小李很执着
2024/06/15
1260
C语言进阶—深度剖析数据在内存中的存储
C语言:数据在内存中的存储
三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最 ⾼位的⼀位是被当做符号位,剩余的都是数值位。
逆向-落叶
2024/10/28
1290
C语言:数据在内存中的存储
C语言重点突破(1)数据在内存中的存储
本文主要的目的是,针对一些在C中不常注意的重点进行解释,加深对于C语言的了解及运用
对编程一片赤诚的小吴
2024/01/23
1370
C语言重点突破(1)数据在内存中的存储
深度剖析数据在内存中的存储
以及他们所占存储空间的大小。 类型的意义: 1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。 2. 如何看待内存空间的视角。
用户10923087
2024/01/23
2140
深度剖析数据在内存中的存储
深度剖析数据在内存中的存储
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
海盗船长
2020/08/27
6900
深度刨析数据在内存中的存储
提问:为什么char属于整型家族? 回答:字符存储的时候,存储的ASCII码值,是整型,所以归类的时候放在整型家族。 浮点数家族
Yui_
2024/10/16
1590
深度刨析数据在内存中的存储
数据在内存中的存储(学好编程必不可少!)
因为在计算机系统中,数值统一用补码来表示和存储。原因在于,用补码来存储,可以将符号位和数值统一处理,同时加法减法也可以统一处理(CPU只有加法器),补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
用户11036582
2024/03/21
1240
数据在内存中的存储(学好编程必不可少!)
c语言进阶部分详解(数据在内存中的存储)
需要注意的是:学习过Java的同学们知道有String(字符串类型),但是c语言没有,我们使用字符数组来代替(char arr [ ]).
是Nero哦
2024/01/18
3040
c语言进阶部分详解(数据在内存中的存储)
[C语言]数据在内存中的存储
             C语言标准规定:sizeof(long)>=sizeof(int)>=sizeof(short).
IT编程爱好者
2023/04/12
1.1K0
[C语言]数据在内存中的存储
相关推荐
整数、浮点数在计算机中的存储
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档