惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cloudbric
Cloudbric
V
Visual Studio Blog
L
LangChain Blog
A
About on SuperTechFans
B
Blog
T
Tenable Blog
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
博客园 - 三生石上(FineUI控件)
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Palo Alto Networks Blog
U
Unit 42
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
C
Check Point Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence
Application and Cybersecurity Blog
Application and Cybersecurity Blog
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
S
Securelist
Security Archives - TechRepublic
Security Archives - TechRepublic
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
Latest news
Latest news
GbyAI
GbyAI
T
Troy Hunt's Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
V2EX - 技术
V2EX - 技术
小众软件
小众软件
Google DeepMind News
Google DeepMind News
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
Netflix TechBlog - Medium
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed

博客园 - 一个人的合唱

手写简易docker synchronized 泛型学习 解决128位秘钥长度限制的方法 CAP学习 ThreadLocal的学习 读书笔记脑图列表 a=a++和a=++a centos7下安装python3 深入理解jvm虚拟机笔记(二) AtomicInteger的使用 volatile学习 echarts重新绘制的时候数据未更新 深入理解jvm虚拟机笔记(一) elasticsearch学习笔记 使用fiddler模拟post请求 二叉堆 二叉平衡树 二叉查找树
反码与补码
一个人的合唱 · 2026-03-18 · via 博客园 - 一个人的合唱

数学里 减去一个数等于跟它的负数相加 所以计算机底层其实只有加法器没有减法器 可以将要减去的值转换成它的负数形式 然后用加法器进行相加

实现

​ 以Java的int类型为例 它32位 第1位是符号位 0是表示是正的 1表示是负的 其余31位表示值的大小 数值范围为 - 2^31 到 2^31 - 1 (0占去了一个位置) 超出范围是发生溢出 需要像Hashmap求槽位那样取模取余数 除数为 2^32 因此对于int类型的 i 和 j来说 i - j = i - j + 2 ^32 两者用int来表示 是一样的
​ 假如 j 是正整型 其二进制表示为 0 ? ... ? 0代表其为正数 2 ^ 32 - 1 的二进制表示是32位1 那么2 ^ 32 - 1 - j 在二进制运算里 假设 j 的二进制表示的第n位为1 那么2 ^ 32 - 1 - j 结果的第 n 位就是0 如果j的第 n 位为 0 那么2 ^ 32 - 1 - j 结果的第 n 位就是1 因此2 ^ 32 - 1 - j 相当于对 j 除了符号位外全都取反
​ 负j的二进制表示为 1 ? ... ? 除了符号位 后面那串跟j完全相同 将后面那串用a表示 那么 j 为 0..a 负 j 为 1.. a 负数的反码为除符号位外 其他位置全部取反 那么负j的反码为1..(对a取反) 而2 ^ 32 - 1 - j 的第一位是1 剩下部分是除了符号位外对j取反 因此2 ^ 32 - 1 - j 可以表示为 1..(对a取反) 所以负j的反码就是 2 ^ 32 - 1 - j
​ 所以 i - j = i - j + 2 ^32 = i + (2 ^32 - 1 - j) + 1 = i + 负j的反码)+ 1 把负 j 的 反码 + 1定义为 负j 的补码 那么i - j 就等于 i + (负j的补码 ) 所以无论遇到减法 得到其负数的补码再相加就行