一文搞清原码,反码,补码及其应用

2023-11-09

“三码”之间的转换

注意:以下的分析均以 1字节 进行

正数 负数
原码 数据的二进制形式 数据的二进制形式
反码 等于原码 原码的符号位不变,其他位取反
补码 等于原码 负数的反码“+1”

注意:无符号数,正数,它们的 原码=反码=补码
负数: 反码=原码的符号位不变,其他位取反
补码:反码+1.

重要:负数在计算机中存储的是补码。

计算机中为啥要用补码呢?

  • 1,将减法运算变为加法运算:

就拿6-10==-4来举个例子:
如果没有补码,则计算如下:
6 + (-10) = -4
0000 0110
+1000 1010
--------------------
1001 0000 = -16 (则计算结果错误)

如果有补码:
0000 0110
1111 0110(- 10的补码)
-----------------
1111 1100(-4的补码)——>1000 0011——>1000 0100== -4

在上述补码的计算中我们也可以得出一个负数由补码到原码的计算方法:“原码 = 补码取反+1”

  • 2,统一了 “0” 的编码 :
    +0 == 0000 0000 == 0000 0000(反码)== 0000 0000(补码)
    -0 == 1000 0000 == 1111 1111(反码) == 0000 0000 (补码)

计算机对数据的存储与读取

  • 有符号取(%d,%hd,%ld)

首先看内存的最高位,如果最高位为1,则将内存数据的符号位不变,取反+1到原码;如果最高位是0 ,将数据原样输出。

  • 无符号取(%u,%x,%o,%lu)

将内存数据原样输出

小结
  • %x,%u,%o都是输出内存的原始数据
  • 十六进制是以原码存储的
  • 每四位二进制代表一位十六进制
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文搞清原码,反码,补码及其应用 的相关文章

  • U盘安装ubuntu18.04 LTS图文详细过程

    扣扣技术交流群 460189483 制作U盘引导盘 安装Ubuntu18 04 LTS系统 一 下载Ubuntu18 04 LTS系统的iso文件 镜像下载地址 https www ubuntu com download desktop 下
  • 《基于大数据架构的视频推荐系统设计与实现》摘要

    基于大数据架构的视频推荐系统设计与实现 是一篇有关视频推荐系统的论文 它描述了基于大数据架构的视频推荐系统的设计与实现过程 论文阐述了系统的数据采集 处理 存储 分析以及推荐算法等方面的内容 最终 论文评估了系统的效果并与其他现有系统进行了
  • Python运算符和数据类型、复杂的if嵌套

    一 占位符 1 1 三种占位符 s 字符串占位符 d 整数占位符 f 小数占位符 代码演示 name 张家辉 age 50 money 10 57 print s代言了贪玩蓝月 他今年岁了 name 张家辉代言了贪玩蓝月 他今年50岁了 p

随机推荐

  • 类似error: #147: declaration is incompatible with ""void printf(const char *, ...)....的问题解决

    我们用LPC型号还是其他型号的系统板或开发板时我们编译文件时可能出现如下的错误 C mdk keil5 ARM ARMCC Bin include stdio h 402 error 147 declaration is incompati
  • STM32 Cube 生态体系

    STM32Cube是ST公司开发的一套生态系统 致力于使STM32的开发变的更简单 并且100 开源免费 它包括两大部分 1 PC软件工具 STM32CubeMX STM32CubeIDE STM32CubeProgrammer STM32
  • python的sorted函数自定义排序

    sorted函数语法 sorted iterable cmp key reverse 在python3中去除了cmp参数 所以这里用到python自带的一个将cmp函数转化为key的值的函数 就是functools模块的cmp to key
  • 内核error: implicit declaration of function 'irq_to_gpio' 解决方法

    第一种方法 文件1 drivers mfd Kconfig 中 删除depends on GENERIC HARDIRQS SPI MASTER 添加depends on GENERIC HARDIRQS SPI MASTER ARCH P
  • R语言零基础入门教程 第五章高级绘图(2)ggplot2包绘图工具直方图,散点图,核密度图

    直方图 实例 nutshell包的births2006 smpl数据集 包含了2006年美国出生人口的数据的10 样本 每一条记录有13个变量 使用数据集前 需通过install packages nutshell 安装并加载 以美国出生人
  • JAVA 单列集合总结

    Collection 接口 add remove contains clear size 迭代器遍历 普通迭代器 不能再遍历过程中修改集合的长度 List接口 单列集合 有序可重复 有索引 add index obj remove inde
  • 如何写好C++类

    先讲一个笑话 同时学习两年 Java的程序员在一起讨论的是面向对象和设计模式 而同时学习两年 C 的程序员 在一起讨论的是 template和各种语言规范到底怎么回事情 下面就从公开的资料中撸一撸如何写好一个c 类 从头文件 h 需要包含的
  • 应用程序访问底层硬件

    2 1驱动程序开发原理 在无操作系统的裸机中 或者类似如DOS这样操作系统中 应用程序和硬件的交互是非常简单的 如同牛郎织女 本来就睡在同一张床上 想怎么说悄悄话都行 可是现在情况有变 他们被天河分开了 要想见面聊几句 也要麻烦喜鹊来搭桥
  • 对图片进行膨胀与腐蚀

    操作前的图片 操作后 代码实现 import cv2 import numpy as np from PIL import Image import os import matplotlib pyplot as plt 生成文件夹 def
  • Python中模块、库、包的概念

    文章目录 一 模块 Moudule 1 模块的概念 2 模块的导入 3 模块的引用于 name 属性 二 库 Library 1 库的概念 2 库的分类 3 第三方库的安装 三 包 Package 1 包的概念 2 区别 一 模块 Moud
  • 【井字棋】

    文章目录 前言 一 内容封装 二 基本流程 一 游戏菜单 二 数组初始化 三 棋盘打印 四 玩家落子 五 电脑落子 六 判断输赢 三 运行实例 四 完整代码 一 game h 二 game c 三 test c 总结 点击跳转 n子棋 前言
  • 嵌入式行业真的没有前途吗?

    点击上方 大鱼机器人 选择 置顶 星标公众号 福利干货 第一时间送达 嵌入式行业前途 是永恒的话题 因为嵌入式的高门槛和软件工程师的 快速 入行 烦扰了很多徘徊在嵌入式的新人 而近期 知乎这一话题也引发了大面积的讨论 21ic家这里引用一下
  • oracle:IF语句 Loop循环 Cursor的用法(二)

    游标FOR循环 在大多数时候我们在设计pl sql程序的时候都遵循下面的步骤 打开游标 gt 开始循环 gt 从游标中取值 gt 检查那一行被返回 gt 处理 gt 关闭循环 gt 关闭游标 要在程序中使用游标 必须首先声明游标Cursor
  • 聊城交通技工学校计算机,聊城交通技工学校

    聊城交通技工学校招生专业类型 1 就业型 以就业为目的高薪或校企合作定向培养的专业 适合成绩较差 头脑灵活 善于动手的初中毕业生 分精品专业和普通专业 精品型 专业前瞻 薪酬高 签订就业保障协议 100 安置工作 普通型 传统专业 推荐工作
  • Android源码分析 - Service启动流程

    开篇 本篇以android 11 0 0 r25作为基础解析 在之前的文章中 我们已经分析过了四大组件中Activity和ContentProvider的启动流程 这次我们就来讲讲四大组件之一的Service是如何启动和绑定的 流程图 在查
  • vue 数据监听失败原因和解决方式

    1 原因 地址没有改变 vue就监测不到数据变化 这个时候 双向绑定就失效了 官方也有相关解释 对数组 或对象添加新的属性 删除属性或者修改数组长度是无法被监听的 2 解决办法 对象 this set obj name 值 对对象进行操作时
  • pycharm中怎样打开命令行来调试python程序

    在程序运行时总需要命令行或终端来调试程序 以下是pycharm打开命令行的方法 点击左下角的框框 出现terminal 即命令行 加号是打开另一个命令行 叉号是关闭命令行 GOOD LUCK
  • spring_boot_整合mybatis遇到的问题-如何解决

    BindingException Invalid bound statement not found 如何解决 出现这个错误时 按以下步骤检查一般就会解决问题 1 检查xml文件所在package名称是否和Mapper interface所
  • svn 查看,删除用户名,密码

    1 查看svn 的用户名 密码 找到用户名 密码文件 都是明文的 你可以看到 例 linux hjj hjj ubuntu subversion auth svn simple ls 9aad7e9f713353a655cf43659261
  • 一文搞清原码,反码,补码及其应用

    三码 之间的转换 注意 以下的分析均以 1字节 进行 正数 负数 原码 数据的二进制形式 数据的二进制形式 反码 等于原码 原码的符号位不变 其他位取反 补码 等于原码 负数的反码 1 注意 无符号数 正数 它们的 原码 反码 补码 负数