12 lines
30 KiB
HTML
12 lines
30 KiB
HTML
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><meta name="generator" content="VuePress 2.0.0-rc.24" /><meta name="theme" content="VuePress Theme Plume 1.0.0-rc.164" /><script id="check-mac-os">document.documentElement.classList.toggle('mac', /Mac|iPhone|iPod|iPad/i.test(navigator.platform))</script><script id="check-dark-mode">;(function () {const um= localStorage.getItem('vuepress-theme-appearance') || 'auto';const sm = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;const isDark = um === 'dark' || (um !== 'light' && sm);document.documentElement.dataset.theme = isDark ? 'dark' : 'light';})();</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"原码、反码、补码","image":["https://www.simengweb.com/images/elysia/6.jpg"],"dateModified":"2026-01-09T02:03:40.000Z","author":[]}</script><meta property="og:url" content="https://www.simengweb.com/archives/6f41cabe-41e6-4a09-9f1c-af7dd709a35d/"><meta property="og:site_name" content="仲夏夜之梦"><meta property="og:title" content="原码、反码、补码"><meta property="og:description" content="欢迎来到 0 与 1 的魔法派对!这篇文章将带你揭开原码、反码与补码的奥秘,看计算机如何巧妙地用补码化减为加。让我们一起翻开这页,去捕捉二进制底层那份迷人的理性之美吧♪ 一、 前置概念 计算机底层存储数据的时候使用的是二进制数字,但是计算机在存储一个数字的时候并不是直接存储该数字对应的二进制数,而是存储该数字对应的二进制数的补码。 在了解原码、反码和补..."><meta property="og:type" content="article"><meta property="og:image" content="https://www.simengweb.com/images/elysia/6.jpg"><meta property="og:locale" content="zh-CN"><meta property="og:updated_time" content="2026-01-09T02:03:40.000Z"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:image:src" content="https://www.simengweb.com/images/elysia/6.jpg"><meta name="twitter:image:alt" content="原码、反码、补码"><meta property="article:modified_time" content="2026-01-09T02:03:40.000Z"><link rel="icon" type="image/png" href="https://theme-plume.vuejs.press/favicon-32x32.png"><title>原码、反码、补码 | 仲夏夜之梦</title><meta name="description" content="欢迎来到 0 与 1 的魔法派对!这篇文章将带你揭开原码、反码与补码的奥秘,看计算机如何巧妙地用补码化减为加。让我们一起翻开这页,去捕捉二进制底层那份迷人的理性之美吧♪ 一、 前置概念 计算机底层存储数据的时候使用的是二进制数字,但是计算机在存储一个数字的时候并不是直接存储该数字对应的二进制数,而是存储该数字对应的二进制数的补码。 在了解原码、反码和补..."><link rel="preload" href="/assets/style-PWY98LJg.css" as="style"><link rel="stylesheet" href="/assets/style-PWY98LJg.css"><link rel="modulepreload" href="/assets/app-Bph9hmvC.js"><link rel="modulepreload" href="/assets/index.html-cQnxxOIf.js"></head><body><div id="app"><!--[--><!--[--><div class="theme-plume vp-layout" vp-container data-v-f73ca3da><!--[--><!--[--><!--]--><!--[--><span tabindex="-1" data-v-17e3d305></span><a href="#VPContent" class="vp-skip-link visually-hidden" data-v-17e3d305> Skip to content </a><!--]--><!----><header class="vp-nav" data-v-f73ca3da data-v-e98a6132><div class="vp-navbar" vp-navbar data-v-e98a6132 data-v-2c31ea5e><div class="wrapper" data-v-2c31ea5e><div class="container" data-v-2c31ea5e><div class="title" data-v-2c31ea5e><div class="vp-navbar-title" data-v-2c31ea5e data-v-1a4f50af><a class="vp-link link no-icon title" href="/" data-v-1a4f50af><!--[--><!--[--><!--]--><!--[--><!--[--><!--[--><img class="vp-image dark logo" style="" src="/plume.svg" alt data-v-480e858a><!--]--><!--[--><img class="vp-image light logo" style="" src="/plume.svg" alt data-v-480e858a><!--]--><!--]--><!--]--><span data-v-1a4f50af>仲夏夜之梦</span><!--[--><!--]--><!--]--><!----></a></div></div><div class="content" data-v-2c31ea5e><div class="content-body" data-v-2c31ea5e><!--[--><!--]--><div class="vp-navbar-search search" data-v-2c31ea5e><div class="search-wrapper" data-v-97535d1e><!----><div id="local-search" data-v-97535d1e><button type="button" class="mini-search mini-search-button" aria-label="搜索文档" data-v-97535d1e><span class="mini-search-button-container"><span class="mini-search-search-icon vpi-mini-search" aria-label="search icon"></span><span class="mini-search-button-placeholder">搜索文档</span></span><span class="mini-search-button-keys"><kbd class="mini-search-button-key"></kbd><kbd class="mini-search-button-key">K</kbd></span></button></div></div></div><!--[--><!--]--><nav aria-labelledby="main-nav-aria-label" class="vp-navbar-menu menu" data-v-2c31ea5e data-v-d43c1732><span id="main-nav-aria-label" class="visually-hidden" data-v-d43c1732>Main Navigation</span><!--[--><!--[--><a class="vp-link link navbar-menu-link" href="/" tabindex="0" data-v-d43c1732 data-v-d4acf911><!--[--><!----><span data-v-d4acf911>首页</span><!----><!--]--><!----></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/blog/" tabindex="0" data-v-d43c1732 data-v-d4acf911><!--[--><!----><span data-v-d4acf911>博客</span><!----><!--]--><!----></a><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-86530b6c><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-86530b6c><span class="text" data-v-86530b6c><!----><!----><span data-v-86530b6c>学科知识</span><!----><span class="vpi-chevron-down text-icon" data-v-86530b6c></span></span></button><div class="menu" data-v-86530b6c><div class="vp-menu" data-v-86530b6c data-v-709dc2b1><div class="items" data-v-709dc2b1><!--[--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/subject/english/" data-v-1ff1855f><!--[--><!----> 英语学习笔记 <!----><!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-86530b6c><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-86530b6c><span class="text" data-v-86530b6c><!----><!----><span data-v-86530b6c>编程笔记</span><!----><span class="vpi-chevron-down text-icon" data-v-86530b6c></span></span></button><div class="menu" data-v-86530b6c><div class="vp-menu" data-v-86530b6c data-v-709dc2b1><div class="items" data-v-709dc2b1><!--[--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/programming/leetcode/" data-v-1ff1855f><!--[--><!----> LeetCode <!----><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/programming/cplusplus/" data-v-1ff1855f><!--[--><!----> C++ <!----><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/programming/solidity/" data-v-1ff1855f><!--[--><!----> Solidity <!----><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/programming/web/" data-v-1ff1855f><!--[--><!----> Web 开发 <!----><!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-86530b6c><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-86530b6c><span class="text" data-v-86530b6c><!----><!----><span data-v-86530b6c>技术理论</span><!----><span class="vpi-chevron-down text-icon" data-v-86530b6c></span></span></button><div class="menu" data-v-86530b6c><div class="vp-menu" data-v-86530b6c data-v-709dc2b1><div class="items" data-v-709dc2b1><!--[--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/theory/cryptography/" data-v-1ff1855f><!--[--><!----> 密码学基础 <!----><!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-86530b6c><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-86530b6c><span class="text" data-v-86530b6c><!----><!----><span data-v-86530b6c>运维</span><!----><span class="vpi-chevron-down text-icon" data-v-86530b6c></span></span></button><div class="menu" data-v-86530b6c><div class="vp-menu" data-v-86530b6c data-v-709dc2b1><div class="items" data-v-709dc2b1><!--[--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/ops/blockchain/" data-v-1ff1855f><!--[--><!----> 区块链运维 <!----><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/ops/linux/" data-v-1ff1855f><!--[--><!----> Linux 运维 <!----><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-709dc2b1 data-v-1ff1855f><a class="vp-link link" href="/ops/docker/" data-v-1ff1855f><!--[--><!----> Docker 运维 <!----><!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/tools/" tabindex="0" data-v-d43c1732 data-v-d4acf911><!--[--><!----><span data-v-d4acf911>工具</span><!----><!--]--><!----></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/about/" tabindex="0" data-v-d43c1732 data-v-d4acf911><!--[--><!----><span data-v-d4acf911>关于</span><!----><!--]--><!----></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/friends/" tabindex="0" data-v-d43c1732 data-v-d4acf911><!--[--><!----><span data-v-d4acf911>友情链接</span><!----><!--]--><!----></a><!--]--><!--]--></nav><!--[--><!--]--><!----><div class="vp-navbar-appearance appearance" data-v-2c31ea5e data-v-a295abf6><button class="vp-switch vp-switch-appearance" type="button" role="switch" title aria-checked="false" data-v-a295abf6 data-v-596c25a9 data-v-7eb32327><span class="check" data-v-7eb32327><span class="icon" data-v-7eb32327><!--[--><span class="vpi-sun sun" data-v-596c25a9></span><span class="vpi-moon moon" data-v-596c25a9></span><!--]--></span></span></button></div><div class="vp-social-links vp-navbar-social-links social-links" data-v-2c31ea5e data-v-ad52545c data-v-40bac536><!--[--><a class="vp-social-link no-icon" href="/" aria-label="github" target="_blank" rel="noopener" data-v-40bac536 data-v-67b21932><span class="vpi-social-github" /></a><!--]--></div><div class="vp-flyout vp-navbar-extra extra" data-v-2c31ea5e data-v-652282fd data-v-86530b6c><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-86530b6c><span class="vpi-more-horizontal icon" data-v-86530b6c></span></button><div class="menu" data-v-86530b6c><div class="vp-menu" data-v-86530b6c data-v-709dc2b1><!----><!--[--><!--[--><!----><div class="group" data-v-652282fd><div class="item appearance" data-v-652282fd><p class="label" data-v-652282fd>外观</p><div class="appearance-action" data-v-652282fd><button class="vp-switch vp-switch-appearance" type="button" role="switch" title aria-checked="false" data-v-652282fd data-v-596c25a9 data-v-7eb32327><span class="check" data-v-7eb32327><span class="icon" data-v-7eb32327><!--[--><span class="vpi-sun sun" data-v-596c25a9></span><span class="vpi-moon moon" data-v-596c25a9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-652282fd><div class="item social-links" data-v-652282fd><div class="vp-social-links social-links-list" data-v-652282fd data-v-40bac536><!--[--><a class="vp-social-link no-icon" href="/" aria-label="github" target="_blank" rel="noopener" data-v-40bac536 data-v-67b21932><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="vp-navbar-hamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="nav-screen" data-v-2c31ea5e data-v-2b50024d><span class="container" data-v-2b50024d><span class="top" data-v-2b50024d></span><span class="middle" data-v-2b50024d></span><span class="bottom" data-v-2b50024d></span></span></button></div></div></div></div><div class="divider" data-v-2c31ea5e><div class="divider-line" data-v-2c31ea5e></div></div></div><!----></header><div class="vp-local-nav fixed reached-top is-blog" data-v-f73ca3da data-v-3944d8e8><button class="hidden menu" disabled aria-expanded="false" aria-controls="SidebarNav" data-v-3944d8e8><span class="vpi-align-left menu-icon" data-v-3944d8e8></span><span class="menu-text" data-v-3944d8e8>Menu</span></button><div class="vp-local-nav-outline-dropdown" style="--vp-vh:0px;" data-v-3944d8e8 data-v-4114a62c><button data-v-4114a62c>返回顶部</button><!----></div></div><!----><!--[--><div id="VPContent" vp-content class="vp-content" data-v-f73ca3da data-v-b2beaca7><div class="vp-doc-container is-blog" data-v-b2beaca7 data-v-23f6ad98><!--[--><!--]--><div class="container" data-v-23f6ad98><!----><div class="content" data-v-23f6ad98><div class="content-container" data-v-23f6ad98><!--[--><!--]--><main class="main" data-v-23f6ad98><nav class="vp-breadcrumb" data-v-23f6ad98 data-v-1ae4ad7a><ol vocab="https://schema.org/" typeof="BreadcrumbList" data-v-1ae4ad7a><!--[--><li property="itemListElement" typeof="ListItem" data-v-1ae4ad7a><a class="vp-link link breadcrumb" href="/" property="item" typeof="WebPage" data-v-1ae4ad7a><!--[-->首页<!--]--><!----></a><span class="vpi-chevron-right" data-v-1ae4ad7a></span><meta property="name" content="首页" data-v-1ae4ad7a><meta property="position" content="1" data-v-1ae4ad7a></li><li property="itemListElement" typeof="ListItem" data-v-1ae4ad7a><a class="vp-link link breadcrumb" href="/blog/" property="item" typeof="WebPage" data-v-1ae4ad7a><!--[-->博客<!--]--><!----></a><span class="vpi-chevron-right" data-v-1ae4ad7a></span><meta property="name" content="博客" data-v-1ae4ad7a><meta property="position" content="2" data-v-1ae4ad7a></li><li property="itemListElement" typeof="ListItem" data-v-1ae4ad7a><a class="vp-link link breadcrumb" href="/blog/categories/?id=126ac9" property="item" typeof="WebPage" data-v-1ae4ad7a><!--[-->blog<!--]--><!----></a><span class="vpi-chevron-right" data-v-1ae4ad7a></span><meta property="name" content="blog" data-v-1ae4ad7a><meta property="position" content="3" data-v-1ae4ad7a></li><li property="itemListElement" typeof="ListItem" data-v-1ae4ad7a><a class="vp-link link breadcrumb" href="/blog/categories/?id=750eb7" property="item" typeof="WebPage" data-v-1ae4ad7a><!--[-->technology<!--]--><!----></a><span class="vpi-chevron-right" data-v-1ae4ad7a></span><meta property="name" content="technology" data-v-1ae4ad7a><meta property="position" content="4" data-v-1ae4ad7a></li><li property="itemListElement" typeof="ListItem" data-v-1ae4ad7a><a class="vp-link link breadcrumb current" href="/archives/6f41cabe-41e6-4a09-9f1c-af7dd709a35d/" property="item" typeof="WebPage" data-v-1ae4ad7a><!--[-->原码、反码、补码<!--]--><!----></a><!----><meta property="name" content="原码、反码、补码" data-v-1ae4ad7a><meta property="position" content="5" data-v-1ae4ad7a></li><!--]--></ol></nav><!--[--><!--]--><!--[--><h1 class="vp-doc-title page-title" data-v-ba8d1a1e><!----> 原码、反码、补码 <!----></h1><div class="vp-doc-meta" data-v-ba8d1a1e><!--[--><!--]--><p class="reading-time" data-v-ba8d1a1e><span class="vpi-books icon" data-v-ba8d1a1e></span><span data-v-ba8d1a1e>约 1573 字</span><span data-v-ba8d1a1e>大约 5 分钟</span></p><!----><!--[--><!--]--><p class="create-time" data-v-ba8d1a1e><span class="vpi-clock icon" data-v-ba8d1a1e></span><span data-v-ba8d1a1e>2026-01-08</span></p></div><!--]--><!--[--><!--]--><div class="_archives_6f41cabe-41e6-4a09-9f1c-af7dd709a35d_ external-link-icon-enabled vp-doc plume-content" vp-content data-v-23f6ad98><!--[--><!--]--><div data-v-23f6ad98><p>欢迎来到 0 与 1 的魔法派对!这篇文章将带你揭开原码、反码与补码的奥秘,看计算机如何巧妙地用补码化减为加。让我们一起翻开这页,去捕捉二进制底层那份迷人的理性之美吧♪</p><h2 id="一、-前置概念" tabindex="-1"><a class="header-anchor" href="#一、-前置概念"><span>一、 前置概念</span></a></h2><p>计算机底层存储数据的时候使用的是二进制数字,但是计算机在存储一个数字的时候并不是直接存储该数字对应的二进制数,而是存储该数字对应的<strong>二进制数的补码</strong>。</p><p>在了解原码、反码和补码之前,我们要了解<strong>机器数</strong>和<strong>真值</strong>的概念。</p><h3 id="_1-机器数" tabindex="-1"><a class="header-anchor" href="#_1-机器数"><span>1) 机器数</span></a></h3><p>一个数在计算机的存储形式是二进制数,我们称这些二进制数为<strong>机器数</strong>。机器数是有符号的,在计算机中用机器数的最高位存放符号位,<code>0</code> 表示正数,<code>1</code> 表示负数。</p><h3 id="_2-真值" tabindex="-1"><a class="header-anchor" href="#_2-真值"><span>2) 真值</span></a></h3><p>因为机器数带有符号位,所以机器数的形式值不等于其真实表示的值(真值)。</p><ul><li>以机器数 <code>1000 0001</code> 为例,其真正表示的值(首位为符号位)为 <code>-1</code>,而形式值(首位就是代表 1)为 <code>129</code>。</li><li>因此将带符号的机器数的真正表示的值称为机器数的<strong>真值</strong>。</li></ul><h2 id="二、-原码、反码与补码" tabindex="-1"><a class="header-anchor" href="#二、-原码、反码与补码"><span>二、 原码、反码与补码</span></a></h2><h3 id="_1-原码" tabindex="-1"><a class="header-anchor" href="#_1-原码"><span>1) 原码</span></a></h3><p>原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值。</p><ul><li><strong>正数</strong>:就是它对应的二进制数。</li><li><strong>负数</strong>:将绝对值对应的二进制最左边位变为 <code>1</code>。</li></ul><p>例如十进制的正负 1,用 8 位二进制的原码表示如下:</p><ul><li><code>[+1]</code> = 原: <code>[ 0000 0001 ]</code></li><li><code>[-1]</code> = 原: <code>[ 1000 0001 ]</code></li></ul><h3 id="_2-反码" tabindex="-1"><a class="header-anchor" href="#_2-反码"><span>2) 反码</span></a></h3><ul><li><strong>正数</strong>:和原码相同。</li><li><strong>负数</strong>:在其原码的基础上,<strong>符号位不变,其余各位取反</strong>。</li></ul><p>示例:</p><ul><li><code>[+1]</code> = 原: <code>[ 0000 0001 ]</code> = 反: <code>[ 0000 0001 ]</code></li><li><code>[-1]</code> = 原: <code>[ 1000 0001 ]</code> = 反: <code>[ 1111 1110 ]</code></li></ul><h3 id="_3-补码" tabindex="-1"><a class="header-anchor" href="#_3-补码"><span>3) 补码</span></a></h3><ul><li><strong>正数</strong>:补码是其原码本身。</li><li><strong>负数</strong>:补码是在其原码的基础上,<strong>符号位不变,其余各位取反后加 1</strong>(即在反码的基础上加 1)。</li></ul><p>示例:</p><ul><li><code>[+1]</code> = 原: <code>[ 0000 0001 ]</code> = 反: <code>[ 0000 0001 ]</code> = 补: <code>[ 0000 0001 ]</code></li><li><code>[-1]</code> = 原: <code>[ 1000 0001 ]</code> = 反: <code>[ 1111 1110 ]</code> = 补: <code>[ 1111 1111 ]</code></li></ul><h2 id="三、-数据在计算机中的存储形式" tabindex="-1"><a class="header-anchor" href="#三、-数据在计算机中的存储形式"><span>三、 数据在计算机中的存储形式</span></a></h2><p>计算机实际上只存储<strong>补码</strong>,所以说原码转换为补码的过程,也可以理解为数据存储到计算机内存中的过程。</p><p>在原、反、补码中,正数的表示是一模一样的,而负数的表示是不相同的。因此对于负数的补码来说,我们不能直接用进制转换将其转换为十进制数值,因为这样是得不到计算机真正存储的十进制数的。<strong>应该将其转换为原码后,再将转换得到的原码进行进制转换为十进制数</strong>(机器数包含符号位)。</p><h2 id="四、-为什么会使用原码、反码、补码" tabindex="-1"><a class="header-anchor" href="#四、-为什么会使用原码、反码、补码"><span>四、 为什么会使用原码、反码、补码</span></a></h2><p>对于人脑来说,知道机器数的第一位是符号位是一件很轻松的事情,但对于计算机基础电路设计来说判别第一位是符号位是非常难和复杂的事情。</p><p>为了让计算机底层设计更加简单,于是设计将符号位参与运算,并且<strong>只保留加法</strong>的方法,通过<strong>加上一个负数的方式来实现减法</strong>。这样让计算机运算更加简单,并且也让符号位参与到运算中去。</p><h2 id="五、-使用原码、反码与补码进行运算" tabindex="-1"><a class="header-anchor" href="#五、-使用原码、反码与补码进行运算"><span>五、 使用原码、反码与补码进行运算</span></a></h2><h3 id="_1-使用原码运算" tabindex="-1"><a class="header-anchor" href="#_1-使用原码运算"><span>1) 使用原码运算</span></a></h3><p>计算十进制表达式:<code>1 - 1 = 0</code></p><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-text"><span class="line"><span>1 - 1 = 1 + (-1)</span></span>
|
||
<span class="line"><span> = 原:[ 0000 0001 ] + 原:[ 1000 0001 ]</span></span>
|
||
<span class="line"><span> = 原:[ 1000 0010 ] = -2</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>结论</strong>:如果用原码表示,让符号位也参与计算,对于减法来说,结果是不正确的。这也是计算机内部在存储数据时不使用原码的原因。为了解决这一问题,出现了反码。</p><h3 id="_2-使用反码运算" tabindex="-1"><a class="header-anchor" href="#_2-使用反码运算"><span>2) 使用反码运算</span></a></h3><p>计算十进制表达式:<code>1 - 1 = 0</code></p><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-text"><span class="line"><span>1 - 1 = 1 + (-1)</span></span>
|
||
<span class="line"><span> = 原:[ 0000 0001 ] + 原:[ 1000 0001 ]</span></span>
|
||
<span class="line"><span> = 反:[ 0000 0001 ] + 反:[ 1111 1110 ]</span></span>
|
||
<span class="line"><span> = 反:[ 1111 1111 ] = 原:[ 1000 0000 ] = -0</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>结论</strong>:通过计算我们发现用反码计算减法,结果的真值部分是正确的。唯一的问题出现在 "0" 这个特殊的数值上。虽然人们理解上 <code>+0</code> 和 <code>-0</code> 是一样的,但是 0 带符号是没有任何意义的,而且会有 <code>[0000 0000]原</code> 和 <code>[1000 0000]原</code> 两个编码表示 0。为了解决这一问题,出现了补码。</p><h3 id="_3-使用补码运算" tabindex="-1"><a class="header-anchor" href="#_3-使用补码运算"><span>3) 使用补码运算</span></a></h3><p>计算十进制表达式:<code>1 - 1 = 0</code></p><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-text"><span class="line"><span>1 - 1 = 1 + (-1)</span></span>
|
||
<span class="line"><span> = 原:[ 0000 0001 ] + 原:[ 1000 0001 ]</span></span>
|
||
<span class="line"><span> = 补:[ 0000 0001 ] + 补:[ 1111 1111 ]</span></span>
|
||
<span class="line"><span> = 补:[ 0000 0000 ] = 原:[ 0000 0000 ] = 0</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>结论</strong>:这样 0 用 <code>[0000 0000]</code> 表示,而以前出现问题的 <code>-0</code> 则不存在了。而且人们还发现可以用 <code>[1000 0000]</code> 表示 <code>-128</code>。</p><p><strong>-128 的推算过程如下</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-text"><span class="line"><span>(-1) + (-127) = -128</span></span>
|
||
<span class="line"><span> = 原:[ 1000 0001 ] + 原:[ 1111 1111 ]</span></span>
|
||
<span class="line"><span> = 补:[ 1111 1111 ] + 补:[ 1000 0001 ]</span></span>
|
||
<span class="line"><span> = 补:[ 1000 0000 ]</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p><strong>注意</strong>:因为实际上是使用以前的 <code>-0</code> 的补码来表示 <code>-128</code>,所以 <code>-128</code> 并没有原码和反码表示。只要补码是 <code>[1000 0000]</code>,其十进制数值就为 <code>-128</code>。</p></blockquote><h3 id="_4-小结" tabindex="-1"><a class="header-anchor" href="#_4-小结"><span>4) 小结</span></a></h3><p>因为补码能多存储一个 <code>-128</code>,而且在计算机底层中存储的是补码,所以在计算机中一个 8 位的二进制数的存储范围是用补码表示的 <code>[-128, 127]</code>,而不是用原码或反码表示的 <code>[-127, 127]</code>。这也可以解释为什么计算机中一个字节的取值范围是 <code>[-128, 127]</code>。</p><h2 id="六、-总结-牢记" tabindex="-1"><a class="header-anchor" href="#六、-总结-牢记"><span>六、 总结(牢记)</span></a></h2><ul><li><strong>二进制的最高位是符号位</strong>:<code>0</code> 表示正数,<code>1</code> 表示负数。</li><li><strong>正数三码合一</strong>:正数的原码、反码、补码都一样。</li><li><strong>负数反码</strong>:它的原码符号位不变,其它位取反。</li><li><strong>负数补码</strong>:它的反码 + 1;反之,负数反码 = 负数补码 - 1。</li><li><strong>0 的表示</strong>:<code>0</code> 的反码、补码都是 <code>0</code>。</li><li><strong>运算方式</strong>:在计算机运算的时候都是以 <strong>“补码”</strong> 的方式来运算的。</li><li><strong>查看结果</strong>:当我们看运算结果的时候,要看它的<strong>原码</strong>(重点)。</li></ul></div><!----><!----><!----></div></main><footer class="vp-doc-footer" data-v-23f6ad98 data-v-7138e2cb><!--[--><!--]--><!----><div class="contributors" aria-label="Contributors" data-v-7138e2cb><span class="contributors-label" data-v-7138e2cb>贡献者: </span><span class="contributors-info" data-v-7138e2cb><!--[--><!--[--><span class="contributor" data-v-7138e2cb>祀梦</span><!----><!--]--><!--]--></span></div><nav class="prev-next" data-v-7138e2cb><div class="pager" data-v-7138e2cb><a class="vp-link link pager-link prev" href="/archives/56ea3081-9c69-43d7-96c8-2812ec08be2c/" data-v-7138e2cb><!--[--><span class="desc" data-v-7138e2cb>上一页</span><span class="title" data-v-7138e2cb>Python 字符串格式化全指南</span><!--]--><!----></a></div><div class="pager" data-v-7138e2cb><a class="vp-link link pager-link next" href="/archives/a5b3ea8e-7c3c-40a1-a737-26e911623da8/" data-v-7138e2cb><!--[--><span class="desc" data-v-7138e2cb>下一页</span><span class="title" data-v-7138e2cb>爱莉希雅语录</span><!--]--><!----></a></div></nav></footer><div id="comment" class="waline-wrapper vp-comment" vp-comment darkmode="false" style="display:block;" data-v-23f6ad98><!----></div><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!--]--><button style="display:none;" type="button" class="vp-back-to-top" aria-label="back to top" data-v-f73ca3da data-v-bcf8d9a6><span class="percent" data-allow-mismatch data-v-bcf8d9a6>0%</span><span class="show icon vpi-back-to-top" data-v-bcf8d9a6></span><svg aria-hidden="true" data-v-bcf8d9a6><circle cx="50%" cy="50%" data-allow-mismatch style="stroke-dasharray:calc(0% - 12.566370614359172px) calc(314.1592653589793% - 12.566370614359172px);" data-v-bcf8d9a6></circle></svg></button><svg style="display:none;" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" aria-label="sign down" class="vp-sign-down" aria-hidden="true" data-v-f73ca3da data-v-900978de><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" data-v-900978de><path d="m19 11l-7 6l-7-6" data-v-900978de></path><path d="m19 5l-7 6l-7-6" opacity="0.6" data-v-900978de></path></g></svg><footer class="vp-footer" vp-footer data-v-f73ca3da data-v-400675cf><!--[--><div class="container" data-v-400675cf><p class="message" data-v-400675cf>愿每一份温柔都被世界珍藏 ✨</p><p class="copyright" data-v-400675cf><a href="https://beian.miit.gov.cn/" target="_blank" aria-label="gongan filing address">沪ICP备2023010022号-1</a>©2025祀梦的个人博客</p></div><!--]--></footer><!--[--><!--]--><!--]--></div><!----><!--]--><!--[--><!--]--><!--]--></div><script type="module" src="/assets/app-Bph9hmvC.js" defer></script></body></html> |