C语言 - 整形在内存中的存储方式

2023-11-11

一.以补码的形式存储在内存当中

1.有符号型的整数二进制首位0表示正,1表示负数;

2.正数的原码、反码、补码都相同,如:

        

3.负数的反码为原码的首位数不变,其他位按位取反所得,补码为反码+1,如:

        

        当然,要得到负数的原码,可以反过来,即补码-1再取反,也可以和原码转补码那样用补码取反+1,这种转换往往更加轻松。

二.大端存储和小端存储

1.大端存储:把一个数据的低位字节内容存放在高地址处,高位字节的内容存放在低地址处;

2.小端存储:把一个数据的高位字节内容存放在高地址处,低位字节的内容存放在低地址处;

3.举例:

    

 图中从上往下和从左往右看内存为由低到高的地址,a的值为0x00 00 00 14,在图中却倒着存储。

 其中,0x14为一个字节,同时也是a的最低位字节,将它存储在了低地址处,而其他的 00 00 00其实也按顺序一步步存储了进去,所以我们按顺序看为0x14 00 00 00,是反过来了的。

 如果用的是用大端存储的话,得到的结果则与小端存储相反。

三.用补码来存储数据的原因

        首先我们得理解一个概念:C语言中CPU计算只有加法。就算是简单的1-1也要转换成1+(-1)的形式,仔细一想,如果我们都用原码相加,结果如下:

10000000000000000000000000000001(-1原码)+

00000000000000000000000000000001( 1原码)=10000000000000000000000000000010

那么得到的将会是一些奇奇怪怪的数字,而如果以补码的方式来计算:

11111111111111111111111111111111(-1补码)+

00000000000000000000000000000001( 1补码)=1 00000000000000000000000000000000

(此时由于数值溢出,使得最高位的1溢出丢失)

以补码的形式则可以避免这种情况,做到只用加法也能进行加减乘除的运算,以便减轻硬件的负担。

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

C语言 - 整形在内存中的存储方式 的相关文章

随机推荐

  • Latex 中插入 Matlab 代码

    这篇文章将介绍如何在 Latex 排版过程中添加 Matlab 代码 功能效果 主要有如下排版功能 语法高亮 自动添加边框 自动添加行号 先上图 大家感受一下效果 而实现这些只需要一行代码加一个包 插入代码块 usepackage list
  • Unity Hub导入项目“静夜思”报错error CS0619: ‘GUIText‘ is obsolete: ‘GUIText has been removed. Use UI.Text inst

    报错 问题 按照控制台报错位置 找到Assets Standard Assets Utility FPSCounter cs文件 根据提示 GUIText is obsolete GUIText has been removed Use U
  • RFID医药供应链管理系统解决方案——铨顺宏FUWIT

    1 社会背景 根据世界卫生组织的报告 全球假药比例已经超过10 中国医学会数据显示 我们每年至少有20万人死于假药与用药不当 国际上已经对医疗产品的跟踪十分重视 美国FDA已经通过立法 加强在药物运输 销售 访问 追溯体系的应用 目前医疗领
  • qt5+osg多线程的解决方案

    问题描述 Cannot make QOpenGLContext current in a different thread 解决思路 在主线程中将qt窗体中的QOpenglContext moveToThread到窗体线程中 这样窗体线程在
  • 知识存储-cypher查询语句基础(1)

    1 概述 我们在进行关系型数据库操作的时候使用sql 在使用其他数据库时使用sparsql 在操作neo4j时使用cypher语法 这是一种非常简单的查询语法 方便我们掌握 1 neo4j中的相关概念 节点 节点是图数据库中的一个基本元素
  • 安装neo4j出现的问题

    安装步骤 1 jdk安装 下载地址 https www oracle com java technologies javase downloads html jdk使用11以上版本 点击安装 设置环境变量 全部路径 bin 2 neo4j安
  • 高斯滤波的快速实现

    http www cnblogs com ImageVision archive 2012 06 11 2545555 html 二維高斯函數具有旋轉對稱性 處理後不會對哪一個方向上的邊緣進行了過多的濾波 因此相對其他濾波器 具有無法比擬的
  • python PyQt5事件监听机制

    1 事件监听机制实际上应该是事件循环机制 搜这个搜到的结果更多更详细 2 qt的事件循环实际上不是多线程实现的 实现机制实际上是事件循环和消息队列 随便打开一个QT编写的程序 运行ProcessExplorer等待一段时间后查看进程后发现内
  • idea中java程序打jar包的两种方式(超详细)

    java程序打成的jar包有两种类型 一种是可直接执行的runnable jar文件 另一种是包含多个主类 运行时需要指定主类全类名的jar包 下面我们细说在idea中两种jar包的打包方法及执行jar包时的命令 第一种 含多个主类的jar
  • 【机器学习】最优化方法:梯度下降法

    1 概念 梯度下降法 Gradient Descent 又称最速下降法 Steepest descent 是一种常用的一阶优化方法 是一种用于求解无约束最优化问题的最常用的方法 它选取适当的初始值 并不断向负梯度方向迭代更新 实现目标函数的
  • 颜色空间YCrCb

    YCrCb即YUV 主要用于优化彩色视频信号的传输 使其向后相容老式黑白电视 与RGB视频信号传输相比 它最大的优点在于只需占用极少的频宽 RGB要求三个独立的视频信号同时传输 其中 Y 表示明亮度 Luminance或Luma 也就是灰阶
  • 深度学习网络__tensorflow__第四讲__神经网络优化

    本文为转载北京大学 人工智能实践 Tensorflow笔记 课程 链接 https www icourse163 org course PKU 1002536002 Tensorflow 笔记 第四讲 神经网络优化 4 1 神经元模型 用数
  • VirtualBox的下载与安装

    文章来源 http sh qihoo com pc 91c30d12ff6bd60e9 cota 4 tj url xz sign 360 e39369d1 refer scene so 1 1 下载VirtualBox VirtualBo
  • 2.4.10 Profile HEA参数

    最后更新2021 07 23 HEA有两种使用方式 第一种是独立作为虚拟以太网支持卡使用 第二种是作为普通网卡 性能更高 无论哪一种方式都需要对HEA做一些特殊的初始化设置 并且是互斥的 我们先来看看系统中HEA的状态 操作如 lt 图 2
  • vulhub安装时的问题

    在安装vulhub时 出现cannot import transport或者是无法导入其他的模块 从网上找到的方法都尝试之后均不行 这个文件夹明明存在 但是他就是说找不到 解决方法 在使用pip进行安装的时候 网上找的他们都是直接默认安装的
  • python __doc__方法

    doc 方法是python的内置方法之一 该方法通常会输出指定对象中的注释部分 NB 注意 后面的部分表示输出结果 代码如下 class Debug This is a class for debugging def init self T
  • ESP32-C3入门教程 基础篇(一、ADC采样)

    经过前面的折腾 设计好了自己的测试开发板 搭建好了开发环境 然后正式开始进行功能测试了 测试顺序先从简单的开始吧 一步一步来 目录 前言 1 ADC采样示例测试 1 1 DMA连续采样 1 2 单次采样 1 3 测试源码 2 ESP32 C
  • linux之perf(2)list事件

    Linux之perf 2 list事件 Author Onceday Date 2023年9月3日 漫漫长路 才刚刚开始 参考文档 Tutorial Perf Wiki kernel org perf list 1 Linux manual
  • DevOps理念:开发与运维的融合

    在现代软件开发领域 DevOps 不仅仅是一个流行的词汇 更是一种文化 一种哲学和一种方法论 DevOps 的核心理念是通过开发和运维之间的紧密合作 实现快速交付 高质量和持续创新 本文将深入探讨 DevOps 文化的重要性 原则以及如何在
  • C语言 - 整形在内存中的存储方式

    一 以补码的形式存储在内存当中 1 有符号型的整数二进制首位0表示正 1表示负数 2 正数的原码 反码 补码都相同 如 3 负数的反码为原码的首位数不变 其他位按位取反所得 补码为反码 1 如 当然 要得到负数的原码 可以反过来 即补码 1