深入理解计算机中的补码、反码、原码
问题:
- 我们每天用的钟表,其实只有1~12这12个数字,但我们日常会说13点、17点之类的。
问:13点在钟表上哪个位置?
答:很简单嘛,1点的位置。
你不觉得奇怪吗,为啥13点会和1点在同一个位置?换言之,13和1有啥关系,17和5有啥关系? - 计算机里为啥要用加法替代减法?
- 当然是加法电路设计比减法电路设计简单了,加法电路详见CPU之图解算数逻辑单元ALU
- 怎么用加法替代减法?
一、基本概念
1.0、余数(remainder)
在算术中,当两个整数相除的结果不能以整数商表示时,余数便是其“余留下的量”。当余数为零时,被称为整除。
即:被除数 / 除数 = 商……余数,用数学表示:
a = qd + r, 0 <= r < d
,其中a为被除数,q为商(quotient),d为除数(divisor),r为余数(remainder)。
举例:当除数为4
时,任何正数除以4
时,余数总在0, 1, 2, 3
中;
0 / 4 = 0 …… 0
1 / 4 = 0 …… 1
2 / 4 = 0 …… 2
3 / 4 = 1 …… 3
4 / 4 = 1 …… 0
5 / 4 = 1 …… 1
6 / 4 = 1 …… 2
7 / 4 = 1 …… 3
8 / 4 = 2 …… 0
……
如上,被除数从0
开始递增时,余数会在0, 1, 2, 3
中一直循环下去,这就是同余
现在我们考虑除数为10
时,则余数在0~9
这10个数字中出现;把这10个数字同样置于圆盘中,如上图所示。
在0-9
这10个数字的圆盘中,再也不会有其它数字了,也就是我们限定了我们的数字范围为0~9
,数字个数(记为模)为10
。
给定圆盘上任一个数字作为起始点(记为 src),任一个数字为 终止点(记为dest),我们考虑从src出发,如何到达dest,可以 前进(记为 + ),可以后退(记为 - )。
举例:
src = 3,dest = 4;
- 前进1步(+1),即 3 + 1 = 4;
- 后退9步(-9), 即 3 - 9 = 4;
src = 3,dest = 3;
- 前进0步(+0),即 3 + 0 = 3;
- 后退(9+1)步(-(9+1)), 即 3 - ( 9 + 1) = 4;// 因为我们限定了数字范围为0~9,所以写成(9 + 1)
src = 5,dest = 9;
- 前进4步(+4),即 5 + 4 = 9;
- 后退6步(-6), 即 5 - 6 = 9;
通过上面的例子,发现了吗?
- 对于确定的起止点(如src = 3,dest = 4),不管前进或者后退,我们都可以到达,也就是说前进(1步)等价于后退(9步),
- 前进步数和后退步数之和为模(10),模意味着啥?
- 模意味着走了一圈,一个轮回,起点走一圈,又回到了起点
1.1、补数(complement)
定义:对于给定的进位制,相加后能使自然数 a 的位数增加 1 的最小的数。
说人话:就是前面前进和后退的步数等价的组合(如1和9、2和8、3和7、4和6),也即可以组成模(如10)的组合。
即:
当 a = 1时,a只有1位数字(即个位)要想将a变成2(1+1)位数字10(十位、个位),需要增加9。
所以 9是1的补数;当然1也是9的补数,即1、9互为补数;
同理:2、8互为补数;
3、7互为补数;
4、6互为补数;
问: 36的补数是多少?
答:64
根据上面定义,我们知道对于整数a,a的补数 = 模 - a(a>=0);
补数有啥用?
还是回到之前我们0~9
这10
个数字的圆盘上来,我们来算小学生都会的10以内的加减法:
一顿操作猛如虎,一看结果:直呼OMG,
正如上图所示:减掉一个数,等价于加上这个数的补数。
这里有个重要的前提:数字是有范围的(上面我们限定了0~9这10个数字)
1.2、减法
根据我们上面的结论:当数字是有范围的,则对于这个范围内的数字,减掉一个数,等价于加上这个数的补数,我们可以用加法替代减法,进一步:减去一个正数相当于加上这个正数对应的负数。
还是回到我们前面提到的圆盘上来,我们把这条结论实践下:
- 我们先在坐标轴上标出0~9这10个数字范围,然后移动这个范围框,使框内正负数个数大致相等,如下图所示,数字范围变成了
-5 ~ 4
这10个数字。
- 将坐标轴上的数字范围同步映射到圆盘上。
- 此时,圆盘上数字的运算可以用圆盘外相对应的数字进行替代,即圆盘上的数字范围已经改变了,由之前的0 ~ 9 变成了现在的 -5 ~ 4 。
1.3、补码
看到这里,不知道你是否认可前面的推导结论?
不认可?不认可就对了。聪明的你一定发现了上面的计算的问题:
1 - 5 = -4,在我们映射后变成了 1 + 5 = 6 但 -4 不等于 6?虽然圆盘上6确实对应**-4**,但我们需要的是正确的结果-4,怎么将6转换成-4?
- 好了,为了后面好叙述,我们先给实际求值结果记为原码,映射后的结果记为补码。我们先分析下实际的求值结果和映射后的结果:
- 发现原码为0和正数时,补码正确,即原码为0和正数时,原码等于补码;
- 原码为负数时,补码错误,即原码为负数时,原码不等于补码。
问题来了?原码为负数时,补码(如6)怎么转换成原码(如-4)?
答: 谜底就在谜面上,你直接看圆盘不就好了,圆盘上都标注了,圆盘内外侧的数字就是我们原码和补码的映射表。
问题又来了?圆盘上的映射怎么来的?
答:通过补数变换得到的,即原码为负数时,补码 + |原码| = 模,也即原码为负数时,补数 + |原码| = 模,在1.1小节中,我们提到了 a的补数 = 模 - a(a>=0);
,
综上:原码为负数时,补码 + |原码| = 模
二、 二进制里的花花世界
宏观世界搞定了,看看微观世界,十进制搞完了,看看二进制。
二进制我们以1Byte(8bit)研究,1 Byte 可以表示256个数(28),即模为256
2.1 原码
1 Byte 范围的内数字为0~255
这256个数字。将其置于圆盘上如下:
2.2 补码
- 调整数字范围使其映射到 -128~127 这256个数字:
- 调整圆盘范围,即原码写到圆盘上,补码写到圆盘外,如下:
2.3 补码和原码转换
原码和补码怎么转换呢?
通过1.3节,我们知道如下结论:
- 原码为0和正数时,原码等于补码
- 原码为负数时,补码 + |原码| = 模
- 还记得我们在1.3 小节 文末得到的结论吗?原码为负数时,补码 + |原码| = 模,我们变换下这个等式,即原码为负数时,补码 = 模 - |原码|,按照公式我们计算下:
至此,二进制的原码和补码转换我们也已搞定,即: - 原码为0和正数时,原码等于补码
- 原码为负数时,补码 = 模 - |原码|
2.4 反码
不知道你绕晕了吗?还记得我们的初心吗?怎么用加法替代减法?
2.3 节说原码为负数时,补码 = 模 - |原码|,这玩呢?前面这么多推理就是想用加法替代减法,结果搞了半天回到了原点,还使得计算减法,自己替代自己吗?替代了个寂寞……
不急,稍安勿躁,且听下面道来。
2.4.1 模
细想下 :补数的定义,使得当前数的位数增加1位:
- 假设二进制下,当前为8位,问要使得增加的数最小时,怎么才能使得位数增加1位呢,即由原来的8位变成9位?
答:增加的数为1时最小,此时当前8位数达到了最大,那就是
0b 1111 1111
,即0b 1111 1111
+0b 0000 0001
=0b 1 0000 0000
- 所以我们找到了二进制8位数即将跳变成9位的临界值,即当前8位数的最大值
0b 1111 1111
; - 二进制时,一个数变成最大的最快方式,当然是加上该数按位取反后的值。即
0b 1111 1111
-0b 0000 0001
=0b 1111 1110
,看到了吗,0b 1111 1110
正好等于0b 0000 0001
按位取反的值,那就叫它反码吧,即原码为负数时,反码为原码数据位按位取反,注意这里是数据位,最高位为符号位“为使得定义一致和完整,我们补充:原码为0和正数时,原码等于反码。
- 我们来求下 模
- 如上图所示,原码为负数时,模 (256) = 8bit最大值 + 1 , 8bit最大值 = 原码的绝对值 + 反码,结合之前的 原码为负数时,补码 = 模 - |原码| 得到:
至此,1 Byte 的数据我们通过补码的形式用加法替代了减法。计算机语言内的整数类型比如java
的int (4Byte)、long(8Byte)
都是如此。
三、总结
为了使用加法替代加法,我们先后引入了补数、模、原码、补码、反码等概念:
- 圆盘代表数字是有范围的,该范围的大小即为模,并且会首尾相连。计算机1 Byte、4Byte、8Byte天然会限定数据的范围。数据范围限定后,数据一直累计下去一定会产生数据溢出(即进位丢失),从而结束当前轮回,开始下一轮回;
- 圆盘内的数字是原码,圆盘外的数字是补码,补码也是模内的无符号整数。注意,反码 + 1只是求得补码的一种方式,并非补码的定义;
- 原码为0和正数时,原码等于反码等于补码;
- 原码为负数时,反码为原码数据位按位取反。
相关文章:
深入理解计算机中的补码、反码、原码
问题: 我们每天用的钟表,其实只有1~12这12个数字,但我们日常会说13点、17点之类的。 问:13点在钟表上哪个位置? 答:很简单嘛,1点的位置。 你不觉得奇怪吗,为啥13点会和1点在同一个位…...
调试:用电脑开发移动端网页,然后用手机真机调试
一、背景 电脑开发移动端,然后想真机调试... 二、实现 2.1、电脑和手机链接相同局域网 2.2、pnpm run dev 启动项目 2.3、浏览器访问 localhost:3001/login 2.4、Windowsr 输入cmd,在cmd输入 ipconfig 2.5、浏览器访问 ip地址加/login 2.6、手机端…...
深入浅出:Spring Boot 自定义消息转换器的实现与应用
Spring Boot 作为当前最流行的 Java Web 开发框架之一,广泛应用于微服务架构、企业级应用等多个场景。Spring Boot 提供了灵活且易于扩展的架构,其中消息转换器(Message Converter)是其重要组成部分。消息转换器在 Spring Boot 中…...
基于AI大模型的医院SOP优化:架构、实践与展望
一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术取得了迅猛发展,尤其是大模型的出现,为各个领域带来了革命性的变化。在医疗领域,AI 医疗大模型正逐渐崭露头角,展现出巨大的应用潜力。随着医疗数据的海量积累以及计算能力的大幅提升,AI 医疗大模型能够对复杂的…...
Maven项目集成SQL Server的完整教程:从驱动配置到封装优化
前言 在最近的系统对接过程中,由于对方团队不熟悉技术,最终选择直接提供 SQL Server 视图。本文详细记录了使用 Maven 集成 SQL Server 驱动的过程,以及从配置到查询的各个关键步骤,还包括注意事项与常见问题,希望对需…...
Java 21 优雅和安全地处理 null
在 Java 21 中,判断 null 依然是开发中常见的需求。通过使用现代 Java 提供的工具和特性,可以更加优雅和安全地处理 null。 1. 使用 Objects.requireNonNull Objects.requireNonNull 是标准的工具方法,用于快速判断并抛出异常。 示例 import java.util.Objects;public c…...
Java(四十四)file
Java中的file类:代表文件或者文件夹(目录)类,也就是说将文件或者文件夹通过File类来封装成对象。 一:常用的构造方法: 使用file类,需要通过构造方法创建一个file对象。 1:public File(String pathname) public static void main(String[] args) {File fl = new File(&…...
【51项目】51单片机自制小霸王游戏机
视频演示效果: 纳新作品——小霸王游戏机 目录: 目录 视频演示效果: 目录: 前言:...
【ArcGISPro/GeoScenePro】检查多光谱影像的属性并优化其外观
数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 操作 其他数据 检查影像的属性 熟悉检查您正在使用的栅格属性非常重要。...
《新概念模拟电路》-三极管
三极管 本系列文章主要学习《新概念模拟电路》中的知识点。在工作过程中,碰到一些问题,于是又翻阅了模电这本书。我翻阅的是ADI出版的,西安交通大学电工中心杨建国老师编写的模电书。 <模电>和《数电》这两本书是电子学的专业基础课&…...
K 近邻算法入门指南:明氏距离与皮尔森距离的基础讲解
1、K近邻算法介绍 K近邻(k-Nearest Neighbor,KNN)分类算法的思路是:在特征空间中,如果一个样本附近的k个最近样本的大多数属于某一个类别,则该样本也属于这个类别。K近邻算法中,所选择的邻居都是已经正确分类的对象。…...
如何验证imap是否生效
要验证您的 Outlook 邮箱是否启用了 IMAP 并且正常工作,可以按照以下步骤进行操作: 1. 确认 Outlook 邮箱是否启用 IMAP 步骤: 登录到您的 Outlook Web 账户: 打开浏览器,访问 Outlook.com 或 Microsoft 365 Outlook…...
MySQL 06 章——多表查询
多表查询,也称为关联查询,是指两个表或多个表一起完成查询操作 前提条件,这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段的。这个关联字段可能建立了外键,也可能没…...
转换VMware Esxi 虚拟机到 Windows2019 Hyper-V Server
Hyper-v专用P2V工具disk2vhd实际应用 工具介绍 disk2vhd是一个非常小的P2V转换工具,可以将你的物理服务器或Esxi vm 转换成为VHD或者vhdx格式的虚拟硬盘文件,然后在虚拟平台上作为一台虚拟机来使用。目前disk2vhd的最新版本是2.0.1,已经可以…...
头歌实训2-1:面向对象程序设计-基础部分
第1关:定义银行员工类BankEmployee 本关任务:编写银行员工类BankEmployee,要求: 1.银行员工类的属性包括姓名name,工号num,工资salary 2.姓名name和工号num设置为私有属性,并将salay设置为默认参数3000 平…...
超高分辨率 图像 分割处理
文章大纲 制造业半导体领域高分辨率图像半导体数据集开源的高分辨率晶圆图像数据集1. WM-811K数据集2. Kaggle上的WM-811K Clean Subset数据集医疗 病理领域高分辨率图像1. Camelyon+2. CAMELYON173. CPIA Dataset4. UCF-WSI-Dataset航拍 遥感中的高分辨率 图像航拍遥感领域高分…...
使用 apply 方法将其他列的值传入 DataFrame 或 Series 的函数,来进行更灵活的计算或操作
可以使用 apply 方法将其他列的值传入 DataFrame 或 Series 的函数,来进行更灵活的计算或操作。apply 方法允许你逐行或逐列地对 DataFrame 或 Series 的元素进行操作,而且你可以将其他列的值作为参数传递给函数。 示例:使用 apply 结合其他…...
[CTF/网络安全] 攻防世界 warmup 解题详析
查看页面源代码,发现source.php 得到一串代码,进行代码审计: <?phpclass emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php"];…...
力扣第389题—找不同
class Solution:def findTheDifference(self, s: str, t: str) -> str:# 对字符串 s 和 t 进行排序a sorted(s)b sorted(t)# 比较排序后的两个列表for i in range(len(a)):if a[i] ! b[i]:return b[i]# 如果前面的比较没有找到差异,那么差异字符在 t 的最后一个…...
vite6+vue3+ts+prettier+eslint9配置前端项目(后台管理系统、移动端H5项目通用配置)
很多小伙伴苦于无法搭建一个规范的前端项目,导致后续开发不规范,今天给大家带来一个基于Vite6TypeScriptVue3ESlint9Prettier的搭建教程。 目录 一、基础配置1、初始化项目2、代码质量风格的统一2.1、配置prettier2.2、配置eslint2.3、配置typescript 3、…...
滴滴数据分析80道面试题及参考答案
如何衡量分类好坏? 衡量分类好坏有多种方法,常用的有准确率、精确率、召回率、F1 值、ROC 曲线与 AUC 值等。 准确率:是指分类正确的样本数占总样本数的比例,计算公式为:准确率 = (分类正确的样本数)/(总样本数)。准确率越高,说明分类器整体的分类效果越好,但在正负…...
嵌入式应用软件开发中C语言方向面试题
嵌入式应用软件开发中C语言方向面试题随笔 前言一、C语言基础二、嵌入式开发相关三、硬件相关知识五、实际编程问题前言 做嵌入式开发这么多年了,简单记录下C语言方向常见面试题,这里是应用软件方向的。 一、C语言基础 C语言的指针与数组的区别是什么?指针:指针是一个变量…...
vue3中mixins替代方案
使用自定义 Hooks(Composables) 自定义 Hooks 是一种基于函数的代码复用方式,可以在 setup 函数中使用。它允许将组件的逻辑分割成更小的、可复用的部分。 useCounter.js //useCounter.js import { ref, onMounted } from vue;export func…...
线性代数自学资源推荐我的个人学习心得
1.前言 自己这个学期的课程基本上就结束了,因此我自己就开始学习下个学期的课程--线性代数,也是我们在大学里面的最后一门数学课程了; 之前有过一些这个线性代数的基础,当时主要是参加这个数学建模比赛去学习这个matlab吗&#…...
WordPress Crypto 插件 身份认证绕过漏洞复现(CVE-2024-9989)
0x01 产品简介 WordPress Crypto插件是指那些能够为WordPress网站提供加密货币支付、信息显示或交易功能的插件。这些插件通常与WordPress电子商务插件(如WooCommerce)集成,使网站能够接受多种加密货币支付,或展示加密货币实时信息。支持多种加密货币支付,付款直接进入钱…...
软件逆向之OD基础
OD程序目录 plugin:存放OD所有插件 UDD:存放程序临时的数据,比如:程序注释、断点等 ollydbg.ini:存放OD自身配置的属性表 OLLYDBG.HLP:OD的帮助手册 OD断点 1.软件断点: 介绍:…...
C++并发编程之内存顺序一致性
std::memory_order_seq_cst 是 C11 引入的内存模型中的一种内存顺序(memory order),全称为 Sequential Consistency(顺序一致性)。它是 C 中最严格的内存顺序,提供了最强的同步保证。下面详细解释其含义、意…...
软件测试面试题整理
一、人格相关问题 1、自我介绍结构 姓名工作年限简单介绍上家公司的行业主要负责内容个人优势短期内的职业规划应聘该岗位的原因 2、对未来的发展方向怎么看 3、你对测试最大的兴趣在哪里?为什么? 二、技术相关问题 1、测试理论以及应用 1、给你一个…...
Java中如何实现线程安全的单例模式?
目录 1、懒汉式(线程安全) 2、饿汉式(线程安全) 3、双重校验锁(线程安全) 4、静态内部类(推荐) 5、枚举(最佳方法) 6、总结 在Java中,实现线…...
MYsql--------ubantu中安装mysql
在Ubuntu平台上下载、启动和关闭MySQL的方法如下: 下载安装MySQL 更新软件包列表:打开终端,输入以下命令,确保软件包列表是最新的。sudo apt update安装MySQL服务器:执行以下命令安装MySQL服务器。在安装过程中&…...
【Ubuntu】不能连上网络
1. ping路由器的IP地址 ping 192.168.1.1 如果ping不通的话,可能是网络故障导致的。需要重启配置ip地址。配置文件 sudo vi /etc/network/interface 2. ping 8.8.8.8 如果ping不通的话,可能是路由器不能链接往外网; 或者路由器显示了当…...
探索 AIGC 的基础知识:人工智能生成内容的全景视图
在数字化时代,人工智能生成内容(AIGC)正以前所未有的速度改变着我们的创作方式。本文将深入探讨 AIGC 的定义、构成要素、应用场景以及其带来的优势,帮助读者全面理解这一前沿技术。 1. AIGC 的定义与范围 人工智能生成内容&…...
使用java语言,自定义redistemplate
自定义 RedisTemplate 为了方便使用,你可以创建一个自定义的 RedisTemplate,并将其注入到服务中。 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.…...
React-Router 一站式攻略:从入门到精通,掌握路由搭建与权限管控
文章目录 一、前言二、安装使用 npm 安装(推荐)使用 yarn 安装 三、基础使用设置路由基础结构定义路由和组件关联直接在组件中定义路由定义单独一个路由表 创建导航链接 四、核心组件和功能BrowserRouter 和 HashRouterRoute 组件Link 组件Switch 组件 五…...
运动控制探针功能详细介绍(CODESYS+SV63N伺服)
汇川AM400PLC和禾川X3E伺服EtherCAT通信 汇川AM400PLC和禾川X3E伺服EtherCAT通信_汇川ethercat通信-CSDN博客文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用,从站添加…...
七种改进爬山算法的方法
一、爬山算法 爬山算法(Hill Climbing Algorithm)是一种启发式的基于局部最优解的搜索算法,用于在给定的搜索空间中寻找全局最优解或足够好的解。它属于局部搜索算法,通常用于解决优化问题,包括连续和离散问题。 爬山算法模拟了爬山的过程,从某个随机起始点开始,不断向更…...
【Cocos TypeScript 零基础 4.1】
目录 背景滚动 背景滚动 创建一个 空节点 背景丟进去 ( 复制一个,再丢一次都行) 新建TS脚本 并绑定到 空节点 上 再对TS脚本进行编辑 export class TS2bg extends Component {property (Node) // 通过属性面板去赋值bg1:Node nullproperty (Node) bg2:Node nullprope…...
gitlab高级功能之 CICD Steps
CICD Steps 1. 介绍2. 定义 Steps2.1 Inputs2.2 Outputs 3. Using steps3.1 Set environment variables3.2 Running steps locally 4. Scripts5. Actions5.1 已知的问题 6. 表达式7. 实操7.1 单个step7.2 多个step7.3 复用steps7.4 添加output到step7.5 使用远程step 1. 介绍 …...
全国城市经纬度--包括省会(直辖市)、地级市
全国城市未必齐全,谨慎使用。 一、全国城市csv数据 北京市 北京市 北京市 116.4 39.9 天津市 天津市 天津市 117.2 39.12 河北省 石家庄市 石家庄市 114.52 38.05 河北省 唐山市 唐山市 118.2 39.63 河北省 秦皇岛市 秦皇岛市 119.6 39.93 河北省 邯郸市 邯郸市 1…...
深入解析爬虫中的算法设计:提升效率与准确度
在网络爬虫(Web Scraping)中,设计高效、准确的算法是关键,尤其当面对大量数据或复杂的网站结构时,精心设计的爬虫算法能显著提高爬取速度并提升数据提取的准确性。本篇博客将详细讲解爬虫算法的设计与优化策略…...
java中统一异常处理,如何实现全局异常处理,@RestControllerAdvice 注解实现统一异常处理
文章目录 一、粗谈统一异常处理二、细谈统一异常处理:结合统一结果返回类为什么使用统一异常处理?怎么做?如何处理?代码实现? 一、粗谈统一异常处理 先看个案例: 1、写了一个接口: 实体类如下…...
vscode中调用deepseek实现AI辅助编程
来自 Python大数据分析 费弗里 1 简介 大家好我是费老师,最近国产大模型Deepseek v3新版本凭借其优秀的模型推理能力,讨论度非常之高🔥,且其官网提供的相关大模型API接口服务价格一直走的“价格屠夫”路线,性价比很高…...
设计模式七大原则
在软件开发的广袤领域中,设计模式如同熠熠生辉的灯塔,为开发者指引着通往高效、可维护、可扩展软件系统的方向。而设计模式背后的七大原则,更是这些灯塔的核心支撑,它们是软件开发过程中必须遵循的黄金法则,为我们构建…...
重庆市大数据局:基于可信数据空间的公共数据流通利用
在2024年可信数据空间论坛上,重庆市大数据局相关领导发表了题为:基于可信数据空间的公共数据流通利用的演讲,系统介绍了重庆公共数据流通方面的实践经验和案例。 篇幅限制,部分内容如下:...
高阶数据结构----布隆过滤器和位图
(一)位图 位图是用来存放某种状态的,因为一个bit上只能存0和1所以一般只有两种状态的情况下适合用位图,所以非常适合判断数据在或者不在,而且位图十分节省空间,很适合于海量数据,且容易存储&…...
SpringCloud源码分析-nacos与eureka
一、高版本为什么优先用nacos 如果用alibaba springcloud,那么就是阿里的技术体系。nacos属于阿里的原生技术栈,所以阿里更偏向于用nacos作为服务发现注册。 二、对比分析 Spring Cloud Alibaba 推荐使用 Nacos 作为服务发现和配置管理的首选组件&…...
多台DHCP服务器时的问题讨论
有两台DHCP服务器为主机提供DHCP服务会发生什么 在一个网络中,如果有两台设备同时连接到主机,并且它们都可以提供 DHCP 服务,这可能会引发以下问题: 1. IP 地址冲突 当两台设备都扮演 DHCP 服务器时,它们会分别为主…...
Golang的缓存一致性策略
Golang的缓存一致性策略 一致性哈希算法 在Golang中,缓存一致性策略通常使用一致性哈希算法来实现。一致性哈希算法能够有效地解决缓存节点的动态扩容、缩容时数据重新分布的问题,同时能够保证数据访问的均衡性。 一致性哈希算法的核心思想是将节点的哈希…...
Java-创建一个结合CompletableFuture和自定义功能的工具类
1.重试机制:当异步任务失败时自动重试。 2.超时重试:在指定时间内未完成的任务进行重试。 3.批量处理:将多个任务批量执行并收集结果。 4.日志记录:为每个异步任务添加日志记录,便于调试和监控。 5.自定义线程池:允许用户传入自定义的线程池配置。 import java.util…...
微机——计算机中的数制
目录 数制转换: 十进制数转为非十进制数: 二、八、十六进制数之间的转换: 数及字符的表示: 二进制数的加减运算: 无符号数的运算: 带符号数运算中的溢出问题: 计算机中常用的编码&#…...