補碼詳細分析

補碼引入

舉一個生活化的例子
假設由一個掛鐘,它只能順時鐘調時間,那么它調時間就分成了一下兩種情況

  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 (10?3)mod12=[(10mod12)?(3mod12)]mod12=[(10mod12)+(12mod12)?(3mod12)]mod12=(10+12?3)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]?=2n?x

我們會發現用
11111111 - 00001010 = 11110101
正好是00001010的取反

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

所以補碼還可以這樣算
[ ? 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.pswp.cn/diannao/74292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74292.shtml
英文地址,請注明出處:http://en.pswp.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…