补码详细分析

补码引入

举一个生活化的例子
假设由一个挂钟,它只能顺时钟调时间,那么它调时间就分成了一下两种情况

  1. 正好顺时针调就能调好 如:时针从5调到9
  2. 需要逆时针调才能调好 如:时针从10调到7

在上面的情况中1是不用处理的,2我们可以下意识的想到顺时针转过12后再转到7.
诶,这就是计算机补码的思想,我们再用更详细的过程推到一下。

上面的10逆时针调到7记为 10 - 3 = 7
那么10顺时针调到7就是 10 + 2 = 12 再加 7 也就是加了9
原来10 - 3 在 表盘里与 10 + 9 是相等的,为什么?
这就要引入模运算了
取模就是取余数运算符为mod,如5 mod 2 = 1,也就是5 / 2 余 1
我们就可以发现
(10 - 3) mod 12 = 7 mod 12 = 7
(10 + 9) mod 12 = 19 mod 12 = 7
原来是 7 和 19 除以 12 的余数是相同的才有这样的结果
那么这个 9 也就是 -3 在这种情况下的补码
那么这个9是怎么的出来的呢?
( 10 − 3 ) m o d 12 = [ ( 10 m o d 12 ) − ( 3 m o d 12 ) ] m o d 12 = [ ( 10 m o d 12 ) + ( 12 m o d 12 ) − ( 3 m o d 12 ) ] m o d 12 = ( 10 + 12 − 3 ) m o d 12 (10 - 3) mod 12 \\ = [(10 mod 12) - (3 mod 12)] mod 12 \\ = [(10 mod 12) + (12 mod 12) - (3 mod 12)] mod 12 \\ = (10 + 12 - 3) mod 12 (103)mod12=[(10mod12)(3mod12)]mod12=[(10mod12)+(12mod12)(3mod12)]mod12=(10+123)mod12

原来是用12 - 3算出来的9

我们讲表盘中的数字列举出来
1 2 3 4 5 6 7 8 9 10 11 12
在将12换成0
0 1 2 3 4 5 6 7 8 9 10 11
这个12 就是这一串数字所能表达的最大数加一

那么补码 = 能表示的最大数加一 - 减数

补码

让我们根据上面的例子,将计算变成二进制的形式
假设有8为二进制数
能表示最大的数就是11111111
加一后就是100000000
如果要求出 -1010 的补码 绝对值就是00001010(因为上面是减去的3而不是-3)
就用100000000 - 00001010 = 11110110
所以 11110110 就是 -1010 的补码
验算:用10000 - 1010
00010000 - 00001010 = 00000110
00010000 + 11110110 = 100000110 = 00000110

总结更一般的公式

[ − x ] 补 = 2 n − x [-x]_补=2^n-x [x]=2nx

我们会发现用
11111111 - 00001010 = 11110101
正好是00001010的取反

11111111 = 2 n − 1 11111111=2^n-1 11111111=2n1
所以
( 2 n − 1 ) − x + 1 = 2 n − 1 (2^n-1)-x+1=2^n-1 (2n1)x+1=2n1

所以补码还可以这样算
[ − x ] 补 = [ x ] 反 + 1 [-x]_补=[x]_反+1 [x]=[x]+1

如:
[ − 1010 ] 补 = [ 00001010 ] 反 + 1 11110101 + 1 = 11110110 [-1010]_补=[00001010]_反+1 \\ 11110101+1=11110110 [1010]=[00001010]+111110101+1=11110110

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

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

相关文章

计算机网络入门:物理层与数据链路层详解

🌐 (专业解析 中学生也能懂!) 📖 前言 计算机网络就像数字世界的“高速公路系统”,而物理层和数据链路层是这条公路的基石。本文用 专业视角 和 生活化比喻 ,带你轻松理解这两层的核心原理&a…

哪些视频格式在webview2中播放可以设置成透明的?

在WebView2中,能够播放并设置成透明背景的视频格式主要取决于其支持的编解码器以及视频是否包含alpha通道(透明度信息)。以下是支持透明背景的视频格式: 支持透明背景的视频格式 1. WebM(使用VP9编解码器) …

【基于ROS的A*算法实现路径规划】A* | ROS | 路径规划 | Python

### 记录一下使用Python实现ROS平台A*算法路径规划 ### 代码可自取 :Xz/little_projecthttps://gitee.com/Xz_zh/little_project.git 目录 一、思路分析 二、算法实现 三、路径规划实现 一、思路分析 要求使用A*算法实现路径规划,可以将该任务分为三…

2025-03-23 吴恩达机器学习3——多维特征

文章目录 1 多元引入2 矢量化2.1 示例2.2 非矢量化实现2.3 矢量化实现2.4 应用 3 特征缩放3.1 举例3.2 必要性3.3 方法3.3.1 最大最小值缩放(Min-Max Scaling)3.3.2 均值归一化(Mean Normalization)3.3.3 Z 分数归一化&#xff08…

正点原子内存管理学习和修改

由于项目需要用到内存管理进行动态申请和释放,今天又重新学习了一下正点原子的内存管理实验,温习了一下内存管理的实质。首先先上正点原子内存管理的源代码: malloc.c文件: #include "./MALLOC/malloc.h"#if !(__ARMC…

时空观测者:俯身拾贝

目录 中华文明时空贝壳集(按时间排序)1. 良渚玉琮(约公元前3300-2300年)2. 三星堆青铜神树(公元前1200年)3. 殷墟甲骨文(约公元前14世纪)4. 京杭大运河(公元前486年始建&…

护网期间监测工作全解析:内容与应对策略

护网期间监测工作全解析:内容与应对策略 一、引言 在数字化浪潮中,网络安全的重要性愈发凸显,护网行动作为保障关键信息基础设施安全的关键举措,备受瞩目。护网期间,监测工作是发现潜在威胁、防范攻击的重要防线。全…

【Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础05

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 5.zabbix监控HCL模拟网络设备 在保证zabbix-server与HCL网络相通的情况下进行如下操作。 5.1创建主机群 配置-主机群-创建主机群 图 19 取名,添加。 图 20 5.2 创建监控…

趣味极简品牌海报艺术贴纸设计圆润边缘无衬线粗体装饰字体 Chunko Bold - Sans Serif Font

Chunko Bold 是一种功能强大的显示字体,体现了大胆极简主义的原则 – 当代设计的主流趋势。这种自信的字体将粗犷的几何形状与现代的趣味性相结合,具有圆润的边缘和强烈的存在感,与当今的极简主义设计方法完美契合。无论是用于鲜明的构图还是…

Spring Boot(十七):集成和使用Redis

Redis(Remote Dictionary Server,远程字典服务器)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Spring Boot 中集成和使用Redis主要涉及以下几个步骤: 添加依赖 在项目的pom.xml文件中添加Redis的依赖。Spring Boot提供了对Redis的集…

2025-03-21 Unity 序列化 —— 自定义2进制序列化

文章目录 前言1 项目结构1.1 整体1.2 代码 2 实现2.1 Processor2.1.1 BaseType2.1.2 CollectionType2.1.3 CustomType 2.2 ByteFormatter2.3 ByteHelper 3 使用 前言 ​ BinaryFormatter 类可以将 C# 类对象快速转换为字节数组数据。 ​ 在网络开发时,不会使用 Bi…

为WordPress自定义一个留言板

要在WordPress中创建一个留言反馈表单,并实现后台管理功能,您可以按照以下步骤进行操作: 1. 创建留言反馈表单 首先,您需要使用一个表单插件来创建表单。推荐使用 Contact Form 7 或 WPForms。以下是使用 Contact Form 7 的示例…

嵌入式项目:利用心知天气获取天气数据实验方案

【实验目的】 1、利用心知天气服务器获取指定位置天气数据 2、将天气数据解析并可视化显示到OLED屏幕 【实验原理】 【实验步骤】 官网注册

go-zero学习笔记

内容不多,只有部分笔记,剩下的没有继续学下去,包括路由与处理器、日志中间件、请求上下文 文章目录 1、go-zero核心库1.1 路由与处理器1.2 日志中间件1.3 请求上下文 1、go-zero核心库 1.1 路由与处理器 package mainimport ("github…

【Go】Go语言继承-多态模拟

继承(结构体嵌入)多态(接口实现和空接口) 1. 继承(结构体嵌入) Go 语言没有传统的面向对象的继承机制,但可以通过“结构体嵌入”实现类似继承的效果。 结构体嵌入:在结构体中嵌入另…

kotlin知识体系(四) : inline、noinline、crossinline 关键字对应编译后的代码是怎样的 ?

kotlin中inline、noinline、crossinline 关键字的作用 在 Kotlin 里,inline、noinline 和 crossinline 这几个关键字和高阶函数紧密相关,它们能够对高阶函数的行为进行优化和控制。下面为你详细阐述它们的作用和原理。 inline 关键字 inline 关键字用…

LabVIEW FPGA与Windows平台数据滤波处理对比

LabVIEW在FPGA和Windows平台均可实现数据滤波处理,但两者的底层架构、资源限制、实时性及应用场景差异显著。FPGA侧重硬件级并行处理,适用于高实时性场景;Windows依赖软件算法,适合复杂数据处理与可视化。本文结合具体案例&#x…

深度解析 Android Matrix 变换(二):组合变换 pre、post

前言 在上一篇文章中,我们讲解了 Canvas 中单个变换的原理和效果,即缩放、旋转和平移。但是单个旋转仅仅是基础,Canvas 变换最重要的是能够随意组合各种变换以实现想要的效果。在这种情况下,就需要了解如何组合变换,以…

Java并发编程之CountDownLatch

1. 基本原理 计数器 CountDownLatch 在创建时需要指定一个初始计数值。这个值通常代表需要等待完成的任务数或线程数。 等待与递减 等待:调用 await() 方法的线程会被阻塞,直到计数器变为 0。递减:每当一个任务完成后,应调用 cou…

C++|GLog开源库的使用 如何实现自定义类型消息日志

参考: C glog使用教程与代码演示 C第三方日志库Glog的安装与使用超详解 GLOG从入门到入门 glog 设置日志级别_glog C版本代码分析 文章目录 日志等级自定义消息创建使用宏定义 日志等级 在 glog 中,日志的严重性是通过 LogSeverity 来区分的&#xff0c…