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


文章目录

  • 前言
  • 简介
  • 八进制原码、反码、补码
    • 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文件进行训练的,但是可以对模型进行微调,以下说的是第…

Java爬虫:按关键字搜索1688商品的实战案例指南

在电商领域,快速获取商品信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品数据。虽然1688开放平台提供了官方API来获取商品信息,但有时使用爬虫技术来抓取数据也是一种有…

C++病毒(^_^|)(2)

第二期 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook;void lrud(…

Python练习11-20

题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 题目&#xff1a;判断101-200之间有多少…

C++ 设计模式-建造者模式

以下是一个完整的C建造者模式示例&#xff0c;包含产品类、建造者接口、具体建造者、指挥者以及测试代码&#xff1a; #include <iostream> #include <string> #include <memory>// 产品类&#xff1a;汽车 class Car { public:void setBody(const std::str…

Repo、manifest以及Gerrit分别是什么?

Repo‌&#xff1a; 定义‌&#xff1a;Repo是一个由Android开发的Python脚本工具&#xff0c;主要用于管理多个git仓库。它并不是为了取代git&#xff0c;而是为了简化对多个git仓库的管理&#xff0c;特别是对于包含数百个git库的大型项目&#xff0c;如Android开源项目(AOS…

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

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

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

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

Docker的深入浅出

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

AUTOGPT:基于GPT模型开发的实验性开源应用程序; 目标设定与分解 ;;自主思考与决策 ;;信息交互与执行

目录 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序目标设定与分解自主思考与决策信息交互与执行AUTOGPT是一款基于GPT模型开发的实验性开源应用程序 目标设定与分解 自主思考与决策 信息交互与执行 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序,它能让大语言模…

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

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

Spring Boot过滤器链:从入门到精通

文章目录 一、过滤器链是什么&#xff1f;二、为什么需要过滤器链&#xff1f;三、Spring Boot中的过滤器链是如何工作的&#xff1f;&#xff08;一&#xff09;过滤器的生命周期&#xff08;二&#xff09;过滤器链的执行流程 四、如何在Spring Boot中定义自己的过滤器&#…

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

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

游戏内常见加密

加密只是增大破解难度&#xff0c;没法说绝对安全&#xff0c;避免过度加密导致性能消耗过大。 通用算法库 lua的加密算法库&#xff1a;https://github.com/somesocks/lua-lockbox/tree/master 比如通信协议就用到里面一些算法cry.encrypt 算法优劣&#xff1a;AES加解密-CBC…

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

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

本地部署DeepSeek Nodejs版

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

UE5中的快捷键汇总

以下是Unreal Engine 5&#xff08;UE5&#xff09;中一些常用的快捷键大全&#xff0c;涵盖编辑器操作、视口导航、蓝图编辑等多个方面(会持续补充作为笔记存在)&#xff1a; 通用快捷键 快捷键功能Ctrl S保存当前关卡Ctrl Shift S保存所有Ctrl Z撤销Ctrl C复制Ctrl V…

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

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

HttpServletRequest 作用

HttpServletRequest 接口在 Java Servlet API 中扮演着至关重要的角色&#xff0c;它是 Servlet 处理客户端 HTTP 请求的核心对象。 每次客户端&#xff08;例如浏览器&#xff09;向服务器发送一个 HTTP 请求时&#xff0c;Servlet 容器&#xff08;例如 Tomcat&#xff09;都…