news 2026/6/10 17:19:15

[原码反码补码]傻傻搞不懂?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[原码反码补码]傻傻搞不懂?

[原码反码补码]傻傻搞不懂?

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

原码

最高位表示符号位(0表示正数, 1表示负数)
其余位表示数值的大小

数的正负之分只有符号位的变化 ->原码不能做加减法

负数原码-正数原码 1000 0100(-4) - 0000 0001(+1) ----------------- 1000 0011(-3)

本质上是− ( 4 − 1 ) = − 3 -(4-1)=-3(41)=3

反码

正数的反码就是自身
负数的反码是由原码符号位不变,其余位取反得到

负数反码-正数反码 1111 1011(-4) - 0000 0001(+1) ----------------- 1111 1010(-5)

结果对了(结果是负数)

负数反码+正数反码 1111 1100(-3) + 0000 0101(+5) -------------------- 0000 0001(+1)

结果少1(结果是正数)

正数反码+负数反码 0000 0111(+7) + 1111 1100(-3) ---------------------- 0000 0011(+3)

结果少1(结果是正数)

补码

正数的补码与原码相同
负数的补码为其反码加1

负数补码+正数补码 1111 1101(-3) + 0000 0101(+5) -------------------- 0000 0010(+2)

对了!

理解

原码是太极形状, 方向相同没法连起来

反码: 数值上没毛病, 但是二进制上却差1

补码: 方向可以连起来 -> 完成加减法的定义(类似数轴)

公式

[ X ] 补 = ( 2 n + [ X ] 原 ) m o d 2 n [X]_{\text{补}} = \left(2^n + [X]_{\text{原}}\right) \mod 2^n[X]=(2n+[X])mod2n

例子1:正数(X = 10 X=10X=10

代入公式:
[ 10 ] 补 = ( 2 8 + 10 ) m o d 2 8 = ( 256 + 10 ) m o d 256 = 266 m o d 256 = 10 \begin{align} [10]_{\text{补}} &= (2^8 + 10) \mod 2^8 \\ &= (256 + 10) \mod 256 \\ &= 266 \mod 256 \\ &= 10 \end{align}[10]=(28+10)mod28=(256+10)mod256=266mod256=10
二进制表示:10 1010的8位补码是00001010(和原码一致)

例子2:负数(X = − 10 X=-10X=10

代入公式:
[ − 10 ] 补 = ( 2 8 + ( − 10 ) ) m o d 2 8 = ( 256 − 10 ) m o d 256 = 246 m o d 256 = 246 \begin{align} [-10]_{\text{补}} &= (2^8 + (-10)) \mod 2^8 \\ &= (256 - 10) \mod 256 \\ &= 246 \mod 256 \\ &= 246 \end{align}[10]=(28+(10))mod28=(25610)mod256=246mod256=246
二进制表示:246 246246的8位二进制是11110110(对应“原码取反+1”的结果:− 10 -1010原码是10001010,取反得11110101,加1得11110110

例子3:零(X = 0 X=0X=0

代入公式:
[ 0 ] 补 = ( 2 8 + 0 ) m o d 2 8 = 256 m o d 256 = 0 \begin{align} [0]_{\text{补}} &= (2^8 + 0) \mod 2^8 \\ &= 256 \mod 256 \\ &= 0 \end{align}[0]=(28+0)mod28=256mod256=0
二进制表示:8位补码是00000000(唯一表示,无“-0”)

例子4:补码特殊值(X = − 128 X=-128X=128,8位)

代入公式:
[ − 128 ] 补 = ( 2 8 + ( − 128 ) ) m o d 2 8 = ( 256 − 128 ) m o d 256 = 128 m o d 256 = 128 \begin{align} [-128]_{\text{补}} &= (2^8 + (-128)) \mod 2^8 \\ &= (256 - 128) \mod 256 \\ &= 128 \mod 256 \\ &= 128 \end{align}[128]=(28+(128))mod28=(256128)mod256=128mod256=128
二进制表示:10000000(没有对应原码,是补码特有的)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 14:52:24

学习笔记【Day 14】Open HarmonyPC的Termony工具在SD-WAN网络QoS控制的适配应用

Open HarmonyPC的Termony工具在SD-WAN网络QoS控制的适配应用本文将结合一个典型的视频会议应用场景,分享在鸿蒙PC上实现SD-WAN智能路由与QoS策略联动的实践心得,涵盖从网络质量感知的流程。一、 场景背景与核心需求在分布式企业办公场景中,总…

作者头像 李华
网站建设 2026/6/7 4:27:26

Python+FFmpeg打造智能视频剪辑

技术实现方案使用Python结合FFmpeg和MoviePy库进行视频剪辑与合成。FFmpeg处理视频解码、编码及基础剪辑,MoviePy提供高级API简化操作流程。安装依赖库:pip install moviepy ffmpeg-python核心代码结构示例:from moviepy.editor import Video…

作者头像 李华
网站建设 2026/6/8 18:43:10

云原生与VMware的融合之道

技术文章大纲:当云原生遇见VMware云原生与VMware的融合背景云原生技术的核心概念(容器化、微服务、DevOps、CI/CD)VMware在虚拟化领域的传统优势云原生对传统虚拟化架构的挑战与机遇VMware的云原生技术栈VMware Tanzu产品家族概述Tanzu Appli…

作者头像 李华
网站建设 2026/6/9 22:26:13

我们如何知道人工智能是否只是烟雾弹?

原文:towardsdatascience.com/how-do-we-know-if-ai-is-smoke-and-mirrors-16ed5b6877aa?sourcecollection_archive---------4-----------------------#2024-04-17 思考“人工智能革命”更像是印刷术还是加密货币。(剧透:两者都不是。&#…

作者头像 李华
网站建设 2026/6/9 7:52:06

金融合规Agent日志深度剖析:如何用日志数据应对SOX、GDPR双重挑战?

第一章:金融合规 Agent 的审计日志在金融行业,系统操作的可追溯性与安全性至关重要。审计日志作为合规性保障的核心组件,能够记录所有关键操作的时间、主体、行为和上下文信息,为监管审查、异常检测和责任追溯提供数据支撑。审计日…

作者头像 李华
网站建设 2026/6/9 8:04:53

LeetCode 451 - 根据字符出现频率排序

文章目录 摘要描述题解答案(整体思路)第一步:统计字符频率第二步:按频率排序第三步:按排序结果拼接字符串 题解代码(Swift 可运行 Demo)题解代码分析1. 为什么用 Dictionary 统计?2.…

作者头像 李华