原码,反码,补码

2023-11-05

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jason_M_Ho/article/details/78700434

  数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。

  对于一个数, 计算机要使用一定的编码方式进行存储。 原码, 反码, 补码是计算机存储一个具体数字的编码方式。

  一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。比如,十进制中的数 +2 ,计算机字长为8位,转换成二进制就是[00000010]。如果是 -2 ,就是 [10000010] 。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 [10000010],其最高位1代表负,其真正数值是 -2 而不是形式值130([10000010]转换成十进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。

  • 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
  • 反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
  • 补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)

举例:

十进制数 原码 反码 补码
85 0101 0101 0101 0101 0101 0101
-85 1101 0101 1010 1010 1010 1011
9 0000 1001 0000 1001 0000 1001
-9 1000 1001 1111 0110 1111 0111

那么计算机为什么要使用补码呢?

  首先,根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1+(-1), 所以计算机被设计成只有加法而没有减法, 而让计算机辨别”符号位”会让计算机的基础电路设计变得十分复杂,于是就让符号位也参与运算,从而产生了反码。 
  用反码计算, 出现了”0”这个特殊的数值, 0带符号是没有任何意义的。 而且会有[0000 0000]和[1000 0000]两个编码表示0。于是设计了补码, 负数的补码就是反码+1,正数的补码就是正数本身,从而解决了0的符号以及两个编码的问题: 用[0000 0000]表示0,用[1000 0000]表示-128。 
   注意-128实际上是使用以前的-0的补码来表示的, 所以-128并没有原码和反码。使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数。 这就是为什么8位二进制, 使用补码表示的范围为[-128, 127]。

 

https://blog.csdn.net/Jason_M_Ho/article/details/78700434

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

原码,反码,补码 的相关文章

  • 当目标是查找某个字符串的所有出现情况时,KMP 最坏情况的复杂度是多少?

    我还想知道哪种算法在查找另一个字符串中所有出现的字符串时具有最坏情况的复杂性 博耶 摩尔算法似乎具有线性时间复杂度 KMP 算法在查找字符串中所有出现的模式时具有线性复杂度 如 Boyer Moore 算法1 如果您尝试在 aaaaaaaa
  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 如何动态查找连接组件

    使用不相交集数据结构可以很容易地得到图的连通分量 而且 它只是支持增量连接组件 http www boost org doc libs 1 46 1 libs graph doc incremental components html 然而
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 线性代数如何在算法中使用?

    我的几个同行都提到 学习算法时 线性代数 非常重要 我研究了各种算法并学习了一些线性代数课程 但我没有看到其中的联系 那么线性代数如何应用在算法中呢 例如 图的连接矩阵可以带来哪些有趣的事情 三个具体例子 线性代数是现代 3D 图形的基础
  • 在 O(n) 时间内找到 n x n 矩阵中的局部最小值

    所以 这不是我的家庭作业问题 而是取自 coursera 算法和数据结构课程的未评分作业 现已完成 You are given an n by n grid of distinct numbers A number is a local m
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 如何将无向图转换为 DAG?

    The 维基页面 http en wikipedia org wiki Directed acyclic graph Relation to other kinds of graphs says 任何无向图都可以通过为其顶点选择总顺序并将每
  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • 图中的后边

    I m having a hard time understanding Tarjan s algorithm for articulation points I m currently following this tutorial he
  • 找到一系列间隔的最有效分组

    我有一个应用程序 其中有一系列不重叠的固定宽度间隔 每个间隔都有一个给定的键 每个间隔具有相同的宽度 并且可以存在连续的间隔 本质上 我想以最小化单独间隔的数量的方式对间隔和键进行分组 这可以通过合并具有相同键的连续间隔或查找匹配间隔并将它
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • 解释一下从 N 个给定集合中的每一个中给出第 K 个最大数字的示例?

    今天我尝试解决一个Facebook 编程挑战赛 https facebook interviewstreet com recruit challenges 我遇到的挑战是 酒吧问题 可以找到here https github com alo
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有

随机推荐

  • 在Spring 中元素的作用

    一 介绍 spring的配置文件中常包含如下元素
  • Liunx创建新用户登录异常:/usr/bin/xauth: error/timeout in locking authority file /home/liuqidong/.Xauthority

    Liunx创建新用户登录异常 usr bin xauth error timeout in locking authority file home liuqidong Xauthority 问题1 在服务器上创建新的用户userA 在使用s
  • c++ 中vector的count是unsigned int而C#中泛型的count为int

    需要注意的 在使用一个返回值之前 要知道这个返回值是什么类型的 不要根据自己的臆断来写 否则c 很多bug不知道原因 十分注意 对比的时候 是自动转成unsigned int类型进行比较的 Orz C 中的泛型 用count都是int类型
  • 连通图的桥(对桥和割点的理解)

    题目链接 https cn vjudge net problem UVA 796 顺便总结一下 对于连通图的桥和割点 首先 从tarjan的角度来说 dfn数组代表的是当前节点的编号 也就是时间戳 low数组代表的是当前节点能够到达的最早的
  • 利用SqlServer触发器自动更新表updatetime字段值

    本文主要记录了使用SqlServer数据库触发器自动更新表的 更新时间updatetime 字段 在 MySQL数据库中 某行数据创建时间字段 createtime 行最新更新时间字段updatetime 可建表时分别用 datetime
  • 【k8s集群管理工具篇】安装kubernetes集群管理工具 - Kuboard v3版本

    k8s集群管理工具篇 安装kubernetes集群管理工具 Kuboard v3版本 一 kuboard介绍 1 kuboard解释 2 kuboard的V3版本 二 安装kuboard 1 下载yaml文件 2 安装kuboard 三 查
  • 使用PIL实现图像的二值化和灰度化DIY

    使用PIL实现图像的二值化和灰度化并输出保存 精简版代码如下 图片二值化 from PIL import Image img Image open r W PY newpicpic bbvvasd jpg 模式L 为灰色图像 它的每个像素用
  • 编译KArchive在windows10下

    使用QT6和VS2019编译KArchive的简要步骤 安装 Qt 我是用源码自己编译的 F qtbuild 安装CMakefile并配置环境变量 安装Git 下载ECM源码 https github com KDE extra cmake
  • linux安装mysql的两种方式

    一 安装到linux 1 安装mysql server 1 在安装之前查看下系统是否已经安装了mysql ls usr share 2 安装mysql server sudo apt get install mysql server 3 再
  • Linux查看并杀死进程

    Linux查看并杀死进程 查看进程 方法一 lsof i 80 i lt 条件 gt 列出符合条件的进程 协议 端口 ip 方法二 netstat anp grep 进程ID a或 all 显示所有连线中的Socket n或 numeric
  • 基于springboot,hdfs的网盘系统(查看,上传,下载,删除,新建文件)

    基于maven的springboot项目 项目目录如下 类路径如下 HDFSREQUEST package cn object demo02 controller import lombok Data import lombok AllAr
  • JAVA中常用的Queue的介绍

    目录 1 java中队列的分类以及队列的介绍 2 PriorityQueue队列的介绍 2 1 PriorityQueue继承结构和方法解读 2 2 PriorityQueue的构造器的实现 3 Deque 双向队列 的简单介绍 3 1 A
  • H . 真签到题

    题目链接 题目描述 Fibonacci 数列 f n f n 1 f n 2 前n项为1 1 2 3 5 8 给出n m 需要你计算出满足条件的对数 i j 的个数 且i lt j 条件是 1 lt gcd f i f j lt n i j
  • 2021-01-23MNIST 测试实战

    通过多个 step 来完成整个训练集的一次迭代 叫做一个 Epoch 在实际训练时 通常需要对数据集迭代多个 Epoch 才能取得较好地训练效果 for epoch in range 20 完成一个 Batch 的数据训练 叫做一个 Ste
  • Docker笔记--查看本地镜像、搜索镜像、拉取镜像和删除镜像

    目录 1 查看本地镜像 2 搜索镜像 3 拉取镜像 4 删除镜像 1 查看本地镜像 sudo docker images 其中 REPOSITORY 表示镜像的名称 TAG 表示版本号 默认下载最新版本latest IMAGE ID表示镜像
  • 创业之路-67]:创业公司不同的产品模式

    模式1 科研型 预研型 3 5年 市场还不成熟 需求还没有显性 属于预测性需求 行业内还没有的成熟的产品形态 行业和自身的技术也都不成熟 还需要一定的酝酿期和技术积累 产品研发通常需要三年以上 甚至五年以上 需要投资资金烧钱 做未来的事 前
  • python读取fits第三方库_python-astropy.io.fits从具有多个HDU的大型fits文件中读取行

    我有一个约50GB的fits文件 其中包含多个HDU 它们都具有相同的格式 一个带有1E5对象和1E6时间戳的 1E5 x 1E6 数组 HDU描述了不同的物理属性 例如磁通 RA DEC等 我只想从每个HDU中读取5个对象 即 5 x 1
  • Databend 开源周报 第 97 期

    Databend 是一款现代云数仓 专为弹性和高效设计 为您的大规模分析需求保驾护航 自由且开源 即刻体验云服务 https app databend cn What s On In Databend 探索 Databend 本周新进展 遇
  • v.douyin.com生成制作抖音缩短口令网址php接口方法

    v douyin com是抖音官方的接口 可以制作头条 火山 抖音短视频等官方域名的任意生成接口 可以推广抖音号 第三方网址 头条文章等 效果非常号 这里记录下api接口 纯技术php生成 具体规则可以去抖音的开放平台去申请对应接口 这里用
  • 原码,反码,补码

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net Jason M Ho article details 78700434 数值在计算机中是以补码的方式存储的 在探求为何计算机要使用补码之前 让我们先