数据存储---整形数据在内存中的存储

2023-11-15

我们每一次写代码的时候,都会创建变量。那么所创建的整形变量是如何在内存中存储的呢?

目录

1.数据类型介绍。

2.整形数据在内存中的存储形式。

3.大小端字节序的介绍。


1.数据类型介绍

本文重点介绍内置类型中的整形家族。

(1)内置类型(C语言本身具有的类型)

  整形家族字符型char,整形int,短整型short,长整形long,更长整形long long。

  浮点型家族单精度浮点型float,双精度浮点型double。

(2)自定义类型

  数组类型

  结构体类型

  枚举类型

  联合类型

(3)指针类型

(4)空类型void

在整形家族中,每个类型又可分为两种类型,有符号signed类型和无符号unsigned类型。如何理解有符号类型和无符号类型?

在我们日常生活中,如人的体重,身高等都只有正数,不存在负数,这种数据就是无符号类型。

像温度,有正有负,就属于有符号类型。

signed有符号类型:既有正数,又有负数。

unsigned无符号类型:只有正数,没有负数。

创建和初始化变量的时候,编译器默认的是有符号signed类型。

如,创建一个int类型的变量int  i=-10,编译器会默认变量i是signed  int i =-10。

创建一个 int类型的变量 unsigned int  j =5,这里创建的才是无符号整形变量 j。

 下表是整形家族的所有类型、存储容量及取值范围。

整形数据类型

存储容量

取值范围

char

8bit(1字节)

-128 ~ 127(-2^7 ~ 2^7-1)

unsigned char

8bit(1字节)

0 ~ 255(0 ~ 2^8 – 1)

int

32bit(4字节)

-2147483648 ~ +2147483647(-2^31 ~ 2^31-1)

unsigned int

32bit(4字节)

0 ~ 4294967295(0 ~ 2^32-1)

short

16bit(2字节)

-32767 ~ 32768(-2^15 ~ 2^15-1)

unsigned short

16bit(2字节)

0 ~ 65536(0 ~ 2^18-1)

long

32/64bit(4/8字节)

-2147483648 ~ +2147483647(-2^31 ~ 2^31-1)

unsigned  long

32/64bit(4/8字节)

0 ~ 4294967295(0 ~ 2^32-1)

long long

64bit(8字节)

-9223372036854775808 ~9223372036854775807(-2^63 ~ 2^63-1)

unsigned long long

64bit(8字节)

0 ~ 18446744073709551615(0 ~ 2^64-1)

从表中可以观察到,无符号类型的取值范围都是正数,有符号类型的取值范围有正有负。

那么有符号和无符号类型有什么意义呢?这就要说到整形数据在内存中的存储方式了。

2.整形数据在内存中的存储形式

一个数值的表示形式有多种:2进制,8进制,10进制,16进制等等。

一个整形数据在内存中是以二进制的方式存储的。

整形数据的二进制数又有三种表示形式:原码、反码、补码

signed类型二进制序列最高位是符号位,其他位是有效位。

unsigned类型没有负数,二进制序列所有位都是有效位。

正数的原码、反码、补码相同

负数的原码、反码、补码需要计算

原码:整形数据的二进制序列。

反码:原码的符号位不变,其他位按位取反。

补码:反码+1。 

那么一个整形变量在内存中是以二进制的哪种形式存储的呢?前往编译器,创建一个整形变量,调试并查看内存。

-10的二进制序列: 10000000000000000000000000001010--原码
                                111111111111111111111111111111110101--反码

                                111111111111111111111111111111110110--补码

 在内存中可以看到,-10在内存中存放的是f6 ff ff ff,这是以16进制呈现出来的,把ff ff ff f6转化为二进制序列:111111111111111111111111111111110110与-10的二进制数中的补码相同,由此可知整形数据在内存中是以补码的二进制序列形式存放的。对于在内存中为什么看到的是16进制形式,是因为编译器为了方便表示出来,以16进制数的形式表示的,内存中实际存放的还是二进制数。

 -10的补码的二进制序列转化为16进制是0x ff ff ff f6,而在内存中看到的是却是 f6 ff ff ff,存放的顺序是相反的,这与大小端字节序相关。

3.大小端字节序的介绍

大端字节序:把数据的高位字节序内容存放在低地址处,把数据的低位字节序内容存放在高地址处

小端字节序: 把数据的高位字节序内容存放在高地址处,把数据的低位字节序内容存放在低地址处

 由此可见,-10在内存中存放的方式就是小端字节序存储,大部分编译器在内存中存放数据的方式都是小端字节序存储。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据存储---整形数据在内存中的存储 的相关文章

随机推荐

  • 使用spring mvc内部集成的jackson将对象转成json格式字符串

    如果是spring boot pom xml里面已经导入了下面这个mvc环境起步依赖也可以用 下面是例子
  • 深度学习入门之如何制作npz、npy文件

    一 需求 论文 EyeTracking for everyone 中提出了iTracker神经网络 并构建了一个叫GazeCapture的数据库 将其部分数据集下载后 可以看到文件的层次结构如下图所示 其中 整个数据集的后缀名是npz 内部
  • 暑假补卷5——进程信号

    信号入门 板书 1 生活角度的信号 你在网上买了很多件商品 再等待不同商品快递的到来 但即便快递没有到来 你也知道快递来临时 你该怎么处理快递 也就是你能 识别快递 当快递员到了你楼下 你也收到快递到来的通知 但是你正在打游戏 需5min之
  • Unity3D学习(5)之工厂回收利用的3D版飞碟游戏

    这一次我们来做的任务是3D版鼠标点击鼠标的游戏 我们先来看一下游戏需求 案例研究 鼠标打飞碟 游戏设计 游戏需求 1 分多个 round 飞碟数量每个 round 都是 n 个 2 每个 round 的飞碟的色彩 大小 发射位置 速度 角度
  • 迅雷2018校园招聘-数字组合问题

    题目 给定整数n 取若干个1到n的整数可求和等于整数m 编程求出所有组合的个数 比如当n 6 m 8时 有四种组合 2 6 3 5 1 2 5 1 3 4 限定n和m小于120 思路 首先 这道题想要通过暴力搜索是无法实现的 那么只能找规律
  • Qt解决Linux/ARM下QSound无法播放的问题

    Qt解决Linux ARM下QSound无法播放的问题 Qt在Linux ARM环境下使用QSound播放音频时 有时会遇到音频无法播放的问题 这有可能是音频文件与Qt不兼容的问题 QSound只能播放 wav格式的音频 无法播放诸如 mp
  • IMAGE REGISTRATION

    Classification Nature area based and feature based Different viewpoints multiview analysis image from different viewpoin
  • registry:NoSuchMethodError zookeeper.server.quorum.flexible.QuorumMaj

    文章目录 1 美图 2 背景 3 问题分析 4 解决方案 1 美图 2 背景 我设置一个已有的registry升级为zk下的ha 但是报错 java lang NoSuchMethodError org apache zookeeper s
  • template之模板注意事项

    前言 在分析STL之前 我们需要先对template做一个回忆 可能我总结的内容你都会了 也可能你没有了印象了 但是我还是希望你先浏览一下template的用法 毕竟STL全部都涉及到了模板 而template是学习STL的基础 templ
  • Stable Diffusion服务环境搭建(远程服务版)

    Stable Diffusion服务环境搭建 远程服务版 Stable Diffusion是什么 Stable diffusion是一个基于Latent Diffusion Models 潜在扩散模型 LDMs 的文图生成 text to
  • 微信小程序:图标的使用(icon)

    摘要 图标主要是用来辅助ui界面的 常用的是 和 像蓝牙和wifi是否连上的标志 让人直观明了 icon的参数 组件icon的参数主要有三个 下图所示 1 type icon的类型 官方给出了9个 分别为success success no
  • 51单片机AD转换代码原理图参考

    include reg52 h define uchar unsigned char define uint unsigned int sbit ADC RD P3 3 sbit ADC WR P3 4 sbit ADC INT P3 5
  • 设计模式——简单工厂模式

    静态工厂方法模式 通过专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 模式中包含的角色及其职责 1 工厂 Creator 角色 简单工厂模式的核心 它负责实现创建所有实例的内部逻辑 工厂类可以被外界直接调用 创建所需
  • DRF学习之token验证(十)

    1 获取某分类下的商品 自定义过滤分类 增加过滤条件top category filter 用于过滤某个分类下的所有商品 class GoodsFilter django filters rest framework FilterSet 商
  • JVM垃圾回收机制(收集器、收集算法、卡表)

    目录 JVM垃圾回收机制 HotSpot垃圾分代回收算法 HotSpot经典垃圾收集器 CMS G1 跨代引用 卡表 写屏障 各种收集器对比 在java开发中 我们不需要过度的关注对象的回收和释放 因为JVM的垃圾回收机制可以帮助我们自动对
  • 全网最详细中英文ChatGPT-GPT-4示例文档-场景问题智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    从0到1快速入门场景问题智能生成应用场景 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node js接口请求示例
  • C/C++学习——自定义数据类型——链表

    链表的概念 一 链表的概念 1 链表是一种存储空间能动态进行增长或缩小的数据结构 2 链表主要用于 1 建立不定长度的数组 2 可以在不重新安排整个存储结构的情况下 方便且迅速地插入和删除数据元素 3 链表广泛应用于数据管理中 二 结点 s
  • 延时任务的四种实现方式

    什么是延迟任务 顾明思议 我们把需要延迟执行的任务叫做延迟任务 延迟任务的使用场景有以下这些 红包 24 小时未被查收 需要延迟执退还业务 每个月账单日 需要给用户发送当月的对账单 订单下单之后 30 分钟后 用户如果没有付钱 系统需要自动
  • D0006-进制,位运算,原反补码

    十进制转其他进制 公式 除基取余 直到商为0 把余数反转拼接 十进制10转换二进制 商 余数 10 2 5 0 5 2 2 1 2 2 1 0 1 2 0 1 把余数反转拼接 1010 原码反码和补码 原码 一个二进制数据 最高位符号位 0
  • 数据存储---整形数据在内存中的存储

    我们每一次写代码的时候 都会创建变量 那么所创建的整形变量是如何在内存中存储的呢 目录 1 数据类型介绍 2 整形数据在内存中的存储形式 3 大小端字节序的介绍 1 数据类型介绍 本文重点介绍内置类型中的整形家族 1 内置类型 C语言本身具