原码、反码和补码

2023-05-16

文章目录

  • 机器数和真值
    • 机器数
    • 真值
  • 原码、反码和补码
    • 原码
    • 反码
    • 补码
  • 编码原因

机器数和真值

机器数

  一个数在计算机中的二进制表示形式叫做这个数的机器数。机器数是带符号的,计算机用一个数的最高位来存放符号,正数为0,负数为1
  例如十进制数+3,假设计算机的字长为8位,转换成二进制就是0000_0011;如果是-3,就是1000_0011。那么,这里的0000_00111000_0011就是机器数。

真值

  因为第一位是符号位,所以机器数的形式值不一定等于真正的数值。例如有符号数1000_0011,最高位1代表负,其真正的数值是-3,而不是形式值131。为了进行区别,将带符号位的机器数对应的真正数值称为机器数的真值
  例如,0000_0001的真值为+000_0001 = +11000_0001的真值为-000_0001 = -1

原码、反码和补码

原码

  原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值:

[+1]= 0000_0001
[-1]= 1000_0001

因为第一位是符号位,所以8位二进制数的取值范围是[1111_1111, 0111_1111],即[-127, 127]

反码

  反码的表示方法如下:

  • 正数的反码是其本身。
  • 负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
[+1] = [0000_0001]= [0000_0001][-1] = [1000_0001]= [1111_1110]

补码

  补码的表示方法如下:

  1. 正数的补码就是其本身。
  2. 负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1
[+1] = [0000_0001]= [0000_0001]= [0000_0001][-1] = [1000_0001]= [1111_1110]= [1111_1111]

编码原因

  对于正数,这三种编码方式的结果都相同:

[+1] = [0000_0001]= [0000_0001]= [0000_0001]

  对于负数,可见原码、反码和补码是完全不同的:

[-1] = [1000_0001]= [1111_1110]= [1111_1111]

  首先来看原码,计算十进制的表达式1 - 1 = 0

1 - 1 = 1 + (-1) = [0000_0001]原 + [1000_0001]= [1000_0010]= -2

如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的。这也就是为何计算机内部不使用原码表示一个数。
  为了解决计算机做减法的问题,出现了反码:

1 - 1 = 1 + (-1) = [0000_0001]原 + [1000_0001]= [0000_0001]反 + [1111_1110]= [1111_1111]= [1000_0000]= -0

结果发现的真值部分是正确的,而唯一的问题其实就出现在0上,会有[0000_0000]原[1000_0000]原两个编码表示0
  补码的出现解决了这个问题:

1 - 1 = 1 + (-1) = [0000_0001]原 + [1000_0001]= [0000_0001]补 + [1111_1111]= [0000_0000]= [0000_0000]

这样可以用[0000_0000]来表示0
  补码可以用[1000_0000]来表示-128

(-1) + (-127) = [1000_0001]原 + [1111_1111]= [1111_1111]补 + [1000_0001]= [1000_0000]

-1 - 127的结果应该是-128,所以在用补码运算的结果中,[1000_0000]补就是-128

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

原码、反码和补码 的相关文章

  • Matplotlib绘图显示缺少中文字体-RuntimeWarning: Glyph 8722 missing from current font.

    pyplot 并不默认支持中文显示 xff0c 也没有自带中文字体 xff0c 因此需要自行下载所需字体 xff0c 并修改 rcParams 参数来显示中文 下面以 SimHei xff08 黑体 xff09 字体为例进行说明 说明 xf
  • Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )

    Win10 系统安装 Linux 子系统教程 WSL2 43 Ubuntu 20 04 43 Gnome 桌面 xff09 1 WSL 简介1 1 什么是 WSL xff1f 1 2 WSL1 与 WSL2 2 安装 WSL2 1 安装 W
  • Ubuntu 桌面美化教程

    将 Ubuntu 桌面美化成 Mac 风格 xff0c 效果如下 1 美化任务栏 Ubuntu 20 04 默认的任务栏在桌面左侧 xff0c 不使用时会自动隐藏 安装 plank dock 工具可以在桌面底部设置一个常驻任务栏 xff08
  • Git 图解教程

    Git 图解教程 基础篇 git 简介 安装与配置 安装 git 配置 git 创建版本库 跟踪修改 提交修改 比较文件 辅助命令 创建分支 合并分支 git merge git rebase 高级篇 移动提交记录 分离的 HEAD 相对引
  • Doxygen + Graphviz 代码自动化分析

    Doxygen 43 Graphviz 代码自动化分析 目录 1 实际需求2 工具简介3 使用说明4 代码注释规范5 参考 1 实际需求 在开发程序时 xff0c 需要编写对应的说明文档 在阅读现有的项目源代码时 xff0c 需要梳理函数间
  • Microsoft Learn: Docker入门教程

    Microsoft Learn Docker入门教程 1 Introduction2 What is Docker3 How Docker images work4 How Docker containers work5 When to u
  • 将kitti数据集中的velodyne points转换为ROS bag文件

    kitti数据集中包含了相机图像 激光扫描得到的点云信息 高精度GPS测量信息和IMU加速度信息 xff0c 用于移动机器人与自动驾驶方面的研究 如下为数据采集平台示意图 kitti数据集中的激光扫描数据是以二进制文件形式存储的 xff0c
  • 使用 Dockerfile 创建一个简单的容器

    Dockerfile Dockerfile 是用于指导 docker 创建自定义 image 的一系列指令 xff0c 是用于创建 image 的蓝图 现在有一个简单的 node 项目 其中Dockerfile 是后面加的 xff0c 初始
  • 导航英语专业词汇——不停更新

    惯性导航 inertia 惯性INS 惯性导航系统GINS 平台惯性导航系统SINS 捷联惯性导航系统IMU 惯性导航元件gyroscope 陀螺仪accelerometer 加速度计 SLAM 词汇词性意思 导航中用 SLAM词组同步定位
  • 不止于linux SSH 基本用法-正反向代理-内外网穿透

    最近小伙伴们纷纷进了实验室 xff0c 就冒出了一系列关于控制远程机器的问题 xff0c 我觉得我还是有必要科普一下的 约定 本文不讲解 Linux 使用方法 xff0c 只讲解机器之间的通信方法 下文中行首的 local 以及 remot
  • 传感器数据滤波算法

    嵌入式应用中 xff0c 系统获取的传感器数据通常不能够直接供应用使用 xff08 存在噪声干扰 xff1a 低频噪声或高频噪声 xff09 xff0c 一般通过一种或者多种滤波算法结合 xff0c 对原始数据进行滤波处理 xff0c 在保
  • 写了一个生成reStructuredText表格的vim插件

    vim官网上有一个rst table xff0c 不过不太好用 xff0c 最大的问题是对中文的支持有欠缺在 f后 xff0c 中文所在的cell的长度会计算错误 扫了一眼它的源码使用了python写的插件 xff0c 所以我就心血来潮也想
  • Ubuntu 16.04 一系列软件安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法

    1 简介 Ubuntu 16 04安装完后 还需要做一些配置才能愉快的使用 包括添加软件源 安装搜狗输入法 Chrome浏览器 网易云音乐 配置快捷键 安装git等等 下面就跟着我来配置吧 just do it 2 版本选择 如果你是小白
  • 从入门到放弃之生产环境基于Kubernetes V1.21.10搭建高可用集群

    1 资源规划 名称系统配置IP组件k8s master01CentOS 7 94核8G 500G存储172 16 97 27kube apiserver lt br gt kube controller manager lt br gt k
  • ros c++ 开发错误“集锦”

    集锦 xff0c 才能经常回放 1 error s getMD5Sum is not a member2 ROS datatype md5sum错误 持续更新 1 error s getMD5Sum is not a member 目前观测
  • 嵌入式ARM算法移植与优化

    目录 一 算法优化指导思想 1 算法优化基本原则 2 算法优化方法 二 编译器优化 1 xff0c 函数内联 2 xff0c 消除公共子表达式 3 xff0c 循环展开 4 xff0c GCC优化选项 5 xff0c ARMCC优化选项 三
  • OV2640摄像头驱动与应用代码

    目录 一 摄像头基础 1 1 OV2640参数 1 2 视场角与镜头 二 OV2640驱动 三 OV2640视频接入
  • ubuntu16.04常用软件安装

    目录 1 办公软件 xff1a WPS 2 文本比较工具 Meld 3 版本管理 xff1a git 4 安装wine 5 安装常用库 6 配置阿里源 7 vim 8 OpenCV 9 QT 10 VSCode 11 gparted 1 办
  • RK1109 NPU算法测试demo

    目录 一 矩阵乘法测试 二 测试结果 一 矩阵乘法测试 通过一个简单的矩阵乘法 xff0c 和L2距离计算来测试NPU计算性能与启动NPU的一般方法 具体代码如下 xff1a Example Calculate x y 2 using Ma
  • VS2015远程连接虚拟机

    目录 一 安装VC Linux exe 二 打开VS 选择新建项目 三 配置VS 四 创建项目 一 安装VC Linux exe 下载地址 xff1a 二 打开VS 选择新建项目 三 配置VS 打开VS xff0c 菜单栏点击工具 gt 选

随机推荐

  • MiniFly微型四轴学习与开发日志(四)

    文章目录 任务创建和删除 API 函数任务调度器开启函数分析临界区atkp c 任务创建和删除 API 函数 FreeRTOS 最基本的功能就是任务管理 xff0c 而任务管理最基本的操作就是创建和删除任务 xff0c FreeRTOS 的
  • Git常用命令

    目录 一 提交代码 二 更新本地代码 三 修改项目中Git远程仓库地址 1 开启Git Bash 2 查看git远程仓库地址 3 修改远程仓库地址 4 检查新地址 Git常用命令备忘 一 提交代码 1 在项目内点击Git Bash Here
  • linux动态库找不到

    linux动态库找不到 一 分析二 解决方式一方式二方式三 三 如何检查RPATH的值 问题状态 xff1a xxx so cannot open shared object file No such file or directory 一
  • ubuntu14.04LTS下创建Qt5.5.1桌面快捷方式

    以下是网上的方法 xff0c 我试了一下 xff0c 反正没成功 Ubuntu14 04LTS在桌面上创建Qt5 4 1快捷方式 1 下载并安装Qt5 4 1 xff0c 我的安装路径时home cao Qt5 4 1 xff08 默认路径
  • Linux操作系统之一:简述Linux系统开机引导和启动过程

    Linux操作系统之一 xff1a 简述Linux系统开机引导和启动过程 操作系统的启动分为两个阶段 xff1a 引导boot 启动startup 引导阶段开始于打开电源开关 xff0c 结束于内核初始化完成和 systemd 进程成功运行
  • TCP IP与UDP含义 区别 总结

    TCP IP协议 xff08 一 xff09 网络基础知识 OSI参考模型中每个分层的作用 1 3 1 应用层 xff1a 为应用程序提供服务并规定应用程序中通信相关的细节 xff1b 包括的协议如下 xff1a xff1a 超文本传输协议
  • STM32F103 CAN总线配置总结

    stm32的can总线的配置如下 xff1a CAN InitStructure CAN TTCM 61 DISABLE 禁止时间触发通信模式 CAN InitStructure CAN ABOM 61 DISABLE CAN InitSt
  • 新版标准日本语初级_第四十八课

    语法 1 自谦语 xff1a 自谦语是通过压低说话人自身或说话人一方的形式表示敬意的表达方式 如跟别人谈到自己的家人或自己公司的上级时 xff0c 也使用自谦语 2 43 一类动 二类动 或 43 三类动的汉字部分 xff1a 这是自谦语中
  • STM32同时使用多个定时器

    代码如下 xff1a span class token keyword void span span class token function TIM2 IRQHandler span span class token punctuatio
  • Qt之定时器

    文章目录 QObject类的定时器定时器类QTimer Qt使用定时器有两种方法 xff0c 一种是使用QObiect类的定时器 xff0c 一种是使用QTimer类 定时器的精确性依赖于操作系统和硬件 xff0c 大多数平台支持20ms的
  • ucos信号量集

    事件标志组 信号量集 的使用 xff1a span class token keyword static span OS STK task testled span class token punctuation span STARTUP
  • Ubuntu 18.04 swap分区扩展

    在开始之前 xff0c 请先使用命令检查您的 Ubuntu 系统的SWAP 分区 sudo swapon show 创建 swap 的文件 xff08 分配 1G 的swap分区大小 xff09 sudo fallocate l 1G sw
  • ping通ipv6地址

    文章目录 WindowsLinux为什么Link local地址后面要有百分号 xff1f Windows ping ipv6主机名的方法如下 xff1a span class token function ping span 6 ipv6
  • STM32_串口的DMA接收

    STM32使用DMA在串口接收数据的方法如下 xff1a span class token macro property span class token directive hash span span class token direc
  • CopyMakeBorder函数

    其作用是复制图像并且制作边界 处理边界卷积 xff1a span class token keyword void span span class token function cvCopyMakeBorder span span clas
  • Altium designer中文化设置

    Altium designer中文化设置的步骤如下 xff0c 然后重启软件即可 xff1a
  • zipfile.BadZipFile: File is not a zip file

    zipfile BadZipFile File is not a zip file的问题复现步骤 xff1a 使用openpyxl的save函数 xff0c 将数据保存在Excel文件中 在没有保存完成的情况下 xff0c 又使用load
  • OpenCV_图像二值化

    对图像进行二值化的关键函数为cvThreshold xff0c 它采用Canny方法对图像进行边缘检测 xff1a span class token keyword void span span class token function c
  • cvSetImageROI函数

    有时候我们需要从一幅图像中获取感兴趣的区域 region of interesting xff0c ROI xff0c 将该区域裁剪成小图像 xff0c 作为后期处理的输入 利用cvSetImageROI函数便可以轻松搞定 xff1a sp
  • 原码、反码和补码

    文章目录 机器数和真值机器数真值 原码 反码和补码原码反码补码 编码原因 机器数和真值 机器数 一个数在计算机中的二进制表示形式叫做这个数的机器数 机器数是带符号的 xff0c 计算机用一个数的最高位来存放符号 xff0c 正数为0 xff