嵌入式硬件篇---原码、补码、反码


文章目录

  • 前言
  • 简介
  • 八进制原码、反码、补码
    • 1. 原码
      • 规则
      • 示例
      • 问题
    • 2. 反码
      • 规则
      • 示例
      • 问题
    • 3. 补码
      • 规则
      • 示例
      • 优点
    • 4. 补码的运算
    • 5. 总结
  • 十六进制原码、反码、补码
    • 1. 十六进制的基本概念
    • 2. 十六进制的原码
      • 规则
      • 示例
    • 3. 十六进制的反码
      • 规则
      • 示例
    • 4. 十六进制的补码
      • 规则
      • 示例
    • 5. 十六进制补码的运算
      • 示例:计算 5 + (-3)
    • 6. 十六进制补码的范围
    • 7. 总结
  • 总结


前言

以上就是今天要讲的内容,本文仅仅简单介绍了八进制、十六进制的原码、反码、补码。


简介

在计算机中,源码、补码和反码是表示有符号整数的三种方式,主要用于处理负数。下面详细介绍它们的概念和转换方法,并通过示例说明。

八进制原码、反码、补码

1. 原码

源码是最直观的表示方法,直接用最高位表示符号(0 表示正数,1 表示负数),其余位表示数值的绝对值

规则

正数:符号位为 0,数值部分为二进制绝对值

负数:符号位为 1,数值部分为二进制绝对值

示例

8 位二进制为例:

+5 的源码:00000101
-5 的源码:10000101

问题

  1. 源码的缺点是 0 有两种表示形式:00000000(+0)和 10000000(-0)。
  2. 加减法运算不方便,需要额外处理符号位。

2. 反码

反码是为了解决源码加减法的问题而提出的。正数的反码与源码相同负数的反码是对源码的数值部分逐位取反(符号位不变)

规则

正数:与源码相同。
负数:符号位为 1,数值部分逐位取反。

示例

+5 的反码:00000101(与源码相同)
-5 的反码:11111010(符号位不变,数值部分取反)

问题

  1. 反码仍然存在 +0 和 -0 的问题。
  2. 加减法运算时,最高位的进位需要循环加到最低位(称为“循环进位”),增加了复杂性。

3. 补码

补码是目前计算机中最常用的表示方法,解决了反码的问题。正数的补码与源码相同,负数的补码是对反码加 1。

规则

正数:与源码相同。
负数:符号位为 1,数值部分逐位取反后加 1。

示例

+5 的补码:00000101(与源码相同)

-5 的补码:
源码:10000101
反码:11111010
补码:11111011(反码加 1)

优点

  1. 0 只有一种表示形式:00000000。
  2. 加减法运算可以直接进行,无需额外处理符号位。
  3. 补码表示的范围比源码和反码更大。

4. 补码的运算

补码的最大优势是加减法可以直接用二进制运算完成。

示例:计算 5 + (-3)
5 的补码:00000101

-3 的补码:
源码:10000011
反码:11111100
补码:11111101

相加:

00000101 (5)
+11111101 (-3)


100000010
由于是 8 位二进制,最高位的进位被丢弃,结果为 00000010,即 2。

5. 总结

源码:直观,但加减法复杂
反码:解决了部分问题,但仍存在 +0 和 -0 的问题
补码:解决了所有问题,是现代计算机的标准表示方法。
通过补码,计算机可以高效地进行有符号整数的加减法运算,同时避免了符号处理的复杂性。

十六进制原码、反码、补码

1. 十六进制的基本概念

十六进制(Hexadecimal)使用 16 个符号表示数值:0-9 和 A-F(A=10, B=11, …, F=15)。

每个十六进制位对应 4 个二进制位。
例如,0x1A 表示二进制的 00011010。

2. 十六进制的原码

原码是数值的直接表示,最高位表示符号(0 为正,1 为负),其余位表示数值的绝对值。

规则

正数:符号位为 0,数值部分为十六进制绝对值。
负数:符号位为 1,数值部分为十六进制绝对值。

示例

假设使用 8 位十六进制数(32 位二进制),最高位为符号位:

+5 的原码:0x00000005
-5 的原码:0x80000005(最高位 8 表示符号位为 1)

3. 十六进制的反码

反码是为了解决原码加减法的问题而提出的。正数的反码与原码相同,负数的反码是对原码的数值部分逐位取反(符号位不变)。

规则

正数:与原码相同。
负数:符号位为 1,数值部分逐位取反。

示例

+5 的反码:0x00000005(与原码相同)
-5 的反码:
原码:0x80000005
数值部分取反:0x7FFFFFFA
因此,-5 的反码为:0x7FFFFFFA

4. 十六进制的补码

补码是目前计算机中最常用的表示方法,解决了反码的问题正数的补码与原码相同,负数的补码是对反码加 1。

规则

正数:与原码相同。
负数:符号位为 1,数值部分逐位取反后加 1。

示例

+5 的补码:0x00000005(与原码相同)
-5 的补码:
原码:0x80000005
反码:0x7FFFFFFA
补码:0x7FFFFFFB(反码加 1)

5. 十六进制补码的运算

补码的优势在于可以直接进行加减法运算,无需额外处理符号位。

示例:计算 5 + (-3)

5 的补码:0x00000005
-3 的补码:
原码:0x80000003
反码:0x7FFFFFFC
补码:0x7FFFFFFD

相加:

0x00000005 (5)
+0x7FFFFFFD (-3)


0x80000002
结果为 0x80000002,即 2。

6. 十六进制补码的范围

对于 32 位十六进制数(8 位十六进制):

正数范围:0x00000000 到 0x7FFFFFFF(0 到 2,147,483,647)
负数范围:0x80000000 到 0xFFFFFFFF(-2,147,483,648 到 -1)

7. 总结

原码:直接表示数值,最高位为符号位
反码:正数与原码相同,负数为原码数值部分取反
补码:正数与原码相同,负数为反码加 1
十六进制补码:与二进制补码的原理相同,只是用十六进制表示。
通过十六进制补码,计算机可以高效地进行有符号整数的加减法运算,同时避免了符号处理的复杂性。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了八进制、十六进制的原码、反码、补码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/70953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式光纤传感:为生活编织“感知密网”

分布式光纤测温技术虽以工业场景为核心,但其衍生的安全效益已逐步渗透至日常生活。 分布式光纤测温技术(DTS)作为一种先进的线型温度监测手段,近年来在多个领域展现了其独特的优势。虽然其核心应用场景主要集中在工业、能源和基础…

本地基于GGUF部署的DeepSeek实现轻量级调优之二:检索增强生成(RAG)

前文,我们在本地windows电脑基于GGUF文件,部署了DeepSeek R1 1.5B模型,如果想在离线模式下加载本地的DeepSeek模型自行对进行训练时,是不能直接使用GGUF文件进行训练的,但是可以对模型进行微调,以下说的是第…

Win10环境借助DockerDesktop部署最新MySQL9.2

Win10环境借助DockerDesktop部署最新MySQL9.2 前言 作为一杆主要撸Java的大数据平台开发攻城狮,必不可少要折腾各种组件,环境和版本一直是很头疼的事情。虽然可以借助Anaconda来托管Python的环境,也可以使用多个虚拟机来部署不同的环境&…

细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法

目录 一、RTC基础知识 1、 RTC的功能 2、RTC工作原理 (1)RTC的时钟信号源 (2)预分频器 (3)实时时钟和日历数据 (4)周期性自动唤醒 (5)可编程闹钟 &a…

Docker的深入浅出

目录 Docker引擎 Docker镜像 (镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包) Docker容器 应用容器化--Docker化 最佳…

Unity中自定义协程的简单实现

在 Unity 中,协程(Coroutine)是一种非常强大的工具,它允许我们在不阻塞主线程的情况下,将代码的执行分成多个步骤,在不同的帧中执行。 Unity中协程实现原理 迭代器与状态机:本质上是基于C#的迭…

【博客之星】GIS老矣尚能饭否?WebGIS项目实战经验与成果展示

目录 一、最前面的话 二、前言 1、关于“夜郎king” 3、GIS的“老骥伏枥” 4、WebGIS的“新程启航” 三、WebGIS技术简介 1、前、后技术简介 2、系统功能架构 四、WebGIS项目应用效果 1、应急灾害 2、交通运输 3、智慧文旅 4、其它项目 五、未来与展望 1、云计算…

C++中什么时候用. 什么时候用->

学了一年C今天出了一个大岔子,因为太久没有做链表类型题目了,并且STL用惯了今天遇到一题,写的时候发现完全不对劲,搞慌了,首先我们看题目 2. 两数相加 再看我第一次的解答,先不论结果对不对 错的行为有很多…

本地部署DeepSeek Nodejs版

目录 1.下载 Ollama 2.下载DeepSeek模型 3.下载 ollama.js 1.下载 Ollama https://ollama.com/ 下载之后点击安装,等待安装成功后,打开cmd窗口,输入以下指令: ollama -v 如果显示了版本号,则代表已经下载成功了。…

java项目之足球联赛管理系统源码(ssm+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的足球联赛管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 足球联赛管理系统的主要使用者…

【C】链表算法题7 -- 环形链表||

leetcode链接https://leetcode.cn/problems/linked-list-cycle-ii/description/ 问题描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到…

uniapp开发h5部署到服务器

1.发行>网站-PC Web或手机H5(仅适用于uniapp) 2.填写网站域名 3.编译成功后会生成一个unpackage文件夹找到下面的h5 4.接下来会使用一个工具把h5里面的文件放到服务器上面(WinSCP使用其他能部署的工具也行) 5.登录 6.登录成功后…

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略,早在2024年5月,推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体,为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来,亚信安全人工智能实验室利…

小白零基础如何搭建CNN

1.卷积层 在PyTorch中针对卷积操作的对象和使用的场景不同,如有1维卷积、2维卷积、 3维卷积与转置卷积(可以简单理解为卷积操作的逆操作),但它们的使用方法比较相似,都可以从torch.nn模块中调用,需要调用的…

21vue3实战-----git husky和git commit规范

21vue3实战-----git husky和git commit规范 1.husky工具1.1目的1.2如何做到这一点?1.3步骤 2.git commit规范2.1使用Commitizen自动生成规范格式供选择2.2代码提交风格2.3代码提交验证 之前在https://blog.csdn.net/fageaaa/article/details/145474065文章中已经讲了在vue项目…

arduino扩展:Arduino Mega 控制 32 个舵机(参考表情机器人)

参考:表情机器人中使用22个舵机的案例 引言 在电子制作与自动化控制领域,Arduino 凭借其易用性和强大的扩展性备受青睐。Arduino Mega 作为其中功能较为强大的一款开发板,具备丰富的引脚资源,能够实现复杂的控制任务。舵机作为常…

PyQt学习记录03——批量设置水印

0. 目录 PyQt学习记录01——加法计算器 PyQt学习记录02——串口助手 1. 前言 本次主要是为了学习Qt中的 QFileDialog 函数, QFileDialog.getExistingDirectory:用于选择文件夹,返回的是一个文件夹路径。 QFileDialog.getOpenFileName&…

Visual Studio 使用 “Ctrl + /”键设置注释和取消注释

问题:在默认的Visual Studio中,选择单行代码后,按下Ctrl /键会将代码注释掉,但再次按下Ctrl /键时,会进行双重注释,这不是我们想要的。 实现效果:当按下Ctrl /键会将代码注释掉,…

社区版IDEA中配置TomCat(详细版)

文章目录 1、下载Smart TomCat2、配置TomCat3、运行代码 1、下载Smart TomCat 由于小编的是社区版,没有自带的tomcat server,所以在设置的插件里面搜索,安装第一个(注意:安装时一定要关闭外网,小编因为这个…

Flink-DataStream API

一、什么样的数据可以用于流式传输 Flink的DataStream API 允许流式传输他们可以序列化的任何内容。Flink自己的序列化程序用于 基本类型:即字符串、长、整数、布尔值、数组复合类型:元组、POJO和Scala样例类 基本类型我们已经很熟悉了,下…