計算機基礎:編碼03,根據十進制數,求其原碼

專欄導航

本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。

(一)WIn32 專欄導航

上一篇:計算機基礎:編碼02,有符號數編碼,原碼

回到目錄

下一篇:無

(二)MFC 專欄導航

上一篇:計算機基礎:編碼02,有符號數編碼,原碼

回到目錄

下一篇:無

本節前言

上一節,我講解了原碼的一點知識。本節,我繼續來講解關于原碼的知識。

在上一節,我講了,根據一個原碼,來判斷它所表示的十進制整數。本節,我們反過來,給定一個十進制整數,來求解其原碼。

一.? ? 根據十進制數求原碼

在下面的講解中,會涉及將十進制數轉為對應的二進制數的知識。將十進制整數轉為二進制數,需要采用除 2 取余法。如果你不會這個方法,請參考下面的鏈接所示的文章。

計算機基礎:二進制基礎04,十進整制數轉化為二進制整數

在確保你已經學會了除 2 取余法之后,你可以接著往下學習本節的知識。

在上一節里面,我們講了原碼的結構。一個原碼,它分為兩個字段。無論這個原碼是 8 位的,還是 16 位的,32 位的,還是 64 位的,它都是分為兩個字段。最高位是一個字段,它是符號位。而其余位是另一個字段,數值位。

給定一個十進制整數,首先呢,看它是 0,正數,還是負數。如果是 0 的話,它的原碼就是全 0 。如果是正整數的話,則符號位為 0,數值位為這個十進制正整數對應的二進制數。如果是負整數的話,則符號位為 1,而數值位是這個十進制負整數的絕對值所對應的二進制數。

舉例來說,如果我們給定 49 這個 十進制正整數,那么,由于是正整數,所以,符號位為 0 。而數值位則是十進制整數 49 所對應的二進制數?11 0001 。假定這個數是 8 位整數,則它的原碼就是 0011 0001 。如果這個數是 16 位整數,則它的原碼是 0000 0000 0011 0001 。注意,填完了符號位與最簡數值位之后,剩余位補 0 。

再來舉一個例子,假定我們要來表示的整數是 -93 。這是一個負整數,所以,符號位為 1 。然后呢,這個負整數的絕對值為 93,所以,數值位為十進制整數 93 所對應的二進制數?101 1101 。假定這個數是 8 位整數,則它的原碼為 1101 1101 。假定這個數是 16 位整數,則它的原碼是 1000 0000 0101 1101 。注意,填完了符號位與最簡數值位之后,剩余位補 0 。

二.? ? 例題

在這里,我只舉一個例子。求解 ±103 的原碼。

無論是 +103,還是 -103,它的絕對值都是 103 。我們先求解 103所對應的二進制數,結果為?110 0111 。這個結果,我們將其作為數值位。

如果是 8 位二進制數,則 +103 的原碼是 0110 0111,-103 的原碼是 1110 0111 。

如果是 16 位二進制數,則 +103 的原碼是 0000 0000 0110 0111,-103 的原碼是 1000 0000 0110 0111 。

三.? ? 特殊的原碼

對于 0 這個數,它的 8 位原碼為 0000 0000,它的 16 位原碼為 0000 0000 0000 0000 。

但是現在有個問題,1000 0000,它代表著什么數呢?符號位為 1,而數值位為 0,它所代表的數,是 -0 嗎?

不是的。

某一個原碼,當符號位為 1,而數值位是全 0 時,這個原碼所代表的數值,要看符號的位權是什么。

在某一個原碼里面,我們設符號位的位權為 a,某一個數,它正好是說,符號位為 1,數值位是全 0,則這個原碼所代表的十進制數為?-2^{a}?。

對于 8 位二進制數,符號位的位權為 7,所以,a 等于 7,則 1000 0000 所代表的十進制數為?-2^{7},為 -128 。

對于 16?位二進制數,符號位的位權為 15,所以,a 等于 15,則 1000 0000 0000 0000 所代表的十進制數為?-2^{15},為 -32768?。

四.? ? 有符號數的范圍

在學習 C/C++ 的時候,我們大概都學習過,8 位有符號整數的范圍是 -128 ~ 127,而 16 位有符號整數的范圍是 -32768 ~ 32767 。

也就是說,signed char 型變量的范圍是?-128 ~ 127,而 short 型變量的范圍是?-32768 ~ 32767 。

那么,為什么是這個范圍呢?

我們先來說 8 位原碼。?

(一)8 位原碼的表示范圍

首先呢,當 8 位全 0 時,此原碼表示的數是 0 。

然后呢,當 符號位是 0,且數值位并非全 0 時,則此原碼代表正整數。此時,這個正整數的數值位的取值范圍是 000 0001?~ 111 1111,也就是 1 ~ 127 。

當符號位為 1 時,且數值位并非全 0 時,則此原碼代表負整數。此時,這個負整數的數值位的取值范圍是 000 0001?~ 111 1111,也就是說,這個負整數的絕對值為?1 ~ 127 。所以,在這種情況里,此原碼的取值范圍是 -127 ~ -1 。

當符號位 為 1,且數值位是全 0 時,此時,這個負整數所表示的數為 -128 。

我們將以上幾種情況清點以下,-128,-127 ~ -1,0,1 ~ 127,把它們組合起來,就是 -128 ~ 127 。

(二)16 位原碼的表示范圍

首先呢,當 16?位全 0 時,此原碼表示的數是 0 。

然后呢,當 符號位是 0,且數值位并非全 0 時,則此原碼代表正整數。此時,這個正整數的數值位的取值范圍是 000 0000 0000 0001?~ 111 1111 1111 1111,也就是 1 ~ 32767 。

當符號位為 1 時,且數值位并非全 0 時,則此原碼代表負整數。此時,這個負整數的數值位的取值范圍是 000 0000 0000 0001?~ 111 1111 1111 1111,也就是說,這個負整數的絕對值為?1 ~ 32767 。所以,在這種情況里,此原碼的取值范圍是 -32767 ~ -1 。

當符號位 為 1,且數值位是全 0 時,此時,這個負整數所表示的數為 -32768 。

我們將以上幾種情況清點以下,-32768,-32767 ~ -1,0,1 ~ 32767,把它們組合起來,就是 -32768 ~ 32767 。

結束語

本節內容,我覺得應該還可以。希望大家能夠學好本節知識。

專欄導航

本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。

(一)WIn32 專欄導航

上一篇:計算機基礎:編碼02,有符號數編碼,原碼

回到目錄

下一篇:無

(二)MFC 專欄導航

上一篇:計算機基礎:編碼02,有符號數編碼,原碼

回到目錄

下一篇:無

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898614.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式(創建型)-單例模式

摘要 在軟件開發的世界里,設計模式是開發者們智慧的結晶,它們為解決常見問題提供了經過驗證的通用方案。單例模式作為一種基礎且常用的設計模式,在許多場景中發揮著關鍵作用。本文將深入探討單例模式的定義、實現方式、應用場景以及可…

基于FPGA頻率、幅度、相位可調的任意函數發生器(DDS)實現

基于FPGA實現頻率、幅度、相位可調的DDS 1 摘要 直接數字合成器( DDS ) 是一種通過生成數字形式的時變信號并進行數模轉換來產生模擬波形(通常為正弦波)的方法,它通過數字方式直接合成信號,而不是通過模擬信號生成技術。DDS主要被應用于信號生成、通信系統中的本振、函…

本地JAR批量傳私服

在有網絡隔離的環境下,Maven項目如果沒有搭建私服就得把用到的通用組件通過U盤在每個組員間拷貝來拷貝去。非常的麻煩跟低效。搭建私服,如果通用組件很多的時候手工一個一個上傳更是非常的麻煩跟低效; 我就遇上這問題,跟A公司合作…

【ROS實戰】02-ROS架構介紹

1. 簡介 你是否曾有過這樣的疑問:我按照文檔安裝了ROS,依照要求寫了一些示例節點(node)、消息(msg)和話題(topic),但覺得過程既麻煩又繁瑣。也許你開始懷疑:…

LeetCode算法題(Go語言實現)_07

題目 給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法,且在 O(n) 時間復…

網絡華為HCIA+HCIP 網絡編程自動化

telnetlib介紹 telnetlib是Python標準庫中的模塊。它提供了實現Telnet功能的類telnetlib.Telnet。這里通過調用telnetlib.Telnet類里的不同方法實現不同功能。 配置云

查看GPU型號、大小;CPU型號、個數、核數、內存

GPU型號、大小 nvidia-smiCPU型號 cat /proc/cpuinfo | grep model name | uniqCPU個數 cat /proc/cpuinfo | grep "physical id" | uniq | wc -lCPU核數 cat /proc/cpuinfo | grep "cpu cores" | uniqCPU內存 cat /proc/meminfo | grep MemTotal參考…

Docker與K8S是什么該怎么選?

用了很久的容器化,最近突然看到一個問題問: docker和K8S究竟有什么區別,到底該怎么選?我認真思考了一會,發現一時間還真說不明白,于是就研究了一段時間發布今天的博文! Docker vs Kubernetes&a…

Android Handler 通過線程安全的 MessageQueue 和底層喚醒機制實現跨線程通信

目錄 一、MessageQueue 的線程安全實現 1. 消息隊列的同步鎖(synchronized) 2. 消息順序與延時處理 二、底層喚醒機制:從 Java 到 Linux 內核 1. 消息插入后的喚醒邏輯 2. Native 層實現(基于 Linux 的 eventfd 和 epoll&am…

關于 2>/dev/null 的作用以及機理

每個進程都有三個標準文件描述符:stdin(標準輸入)、stdout(標準輸出)和stderr(標準錯誤)。默認情況下,stderr會輸出到終端。使用2>可以將stderr重定向到其他地方,比如…

MySQL中的鎖機制:從全局鎖到行級鎖

目錄 1. 鎖的基本概念 2. 全局鎖 2.1 全局鎖的定義 2.2 全局鎖的類型 2.3 全局鎖的使用場景 2.4 全局鎖的實現方式 2.5 全局鎖的優缺點 2.6 全局鎖的優化 3. 表級鎖 3.1 表級鎖的類型 3.2 表級鎖的使用場景 3.3 表級鎖的優缺點 4. 意向鎖(Intention Lo…

編程語言選擇分析:C#、Rust、Go 與 TypeScript 編譯器優化

編程語言選擇分析:C#、Rust、Go 與 TypeScript 編譯器優化 在討論編程語言的選擇時,特別是針對微軟的 C# 和 Rust,以及谷歌的 Go 語言,以及微軟試圖通過 Go 來拯救 TypeScript 編譯器的問題,我們可以從多個角度來分析和…

基于WebRTC的嵌入式音視頻通話SDK:EasyRTC跨平臺兼容性技術架構實時通信的底層實現

EasyRTC的核心架構圍繞WebRTC技術構建,同時通過擴展信令服務、媒體服務器和NAT穿透機制,解決了WebRTC在實際部署中的痛點。其架構可以分為以下幾個核心模塊: 1)WebRTC基礎層 媒體捕獲與處理:通過getUserMediaAPI獲取…

【Rust】包和模塊管理,以及作用域等問題——Rust語言基礎15

文章目錄 1. 前言2. 包和 Crate3. 定義模塊以及模塊之間的關系4. 作用域問題4.1. 作用域問題初現4.2. 解決問題一4.3. 解決問題二4.4. super 關鍵字4.5. 將路徑引入作用域4.6. as 關鍵字4.7. pub use 重導出 5. 引入的問題5.1. 引入一個外部包5.2. 嵌套路徑來消除大量的 use 行…

微服務架構中的API網關:Spring Cloud與Kong/Traefik等方案對比

微服務架構中的API網關:Spring Cloud與Kong/Traefik等方案對比 一、API 網關的概念二、API 網關的主要功能2.1 統一入口與路由轉發2.2 安全與權限控制2.3 流量管理與容錯2.4 API 管理與聚合2.5 監控與日志2.5 協議轉換與適配2.6 控制平面與配置管理 三、API 網關選型…

NewStar CTF web wp

文章目錄 week1headach3會贏嗎智械危機謝謝皮蛋PangBai 過家家(1) week3include meblindsql1臭皮的計算機臭皮踩踩背這照片是你嗎 week4Pangbai過家家四blindsql2chocolateezcmsssezpollute隱藏的密碼 weeek5pangbai過家家(5)redissqlshell臭皮吹泡泡臭皮…

Linux驅動開發-①中斷②阻塞、非阻塞IO和異步通知

Linux驅動開發-①中斷②阻塞、非阻塞IO和異步通知 一,中斷1.中斷的流程2.上半部和下半部2.1上半部2.2下半部2.2.1 tasklet2.2.2 工作隊列 3.按鍵延時消抖中斷程序 二,阻塞和非阻塞IO和異步通知1.阻塞IO1.1 常見結構11.2 常見結構2 2.非阻塞IO2.1 驅動結構…

Docker和Dify學習筆記

文章目錄 1 docker學習1.1 基本命令使用1.1.1 docker ps查看當前正在運行的鏡像1.1.2 docker stop停止容器1.1.3 docker compose容器編排1.1.4 docker網絡[1] 進入到容器里面敲命令[2] docker network ls[3] brige網絡模式下容器訪問宿主機的方式 2 Dify的安裝和基礎使用2.1 下…

高并發庫存系統是否適合使用 ORM(Hibernate / MyBatis)

在設計高并發的庫存管理系統時,數據層的選擇至關重要。許多企業開發中習慣使用 ORM(如 Hibernate、MyBatis)來簡化數據庫訪問,但在高并發、高吞吐的場景下,ORM 的適用性往往成為爭議焦點。本文將探討高并發庫存系統是否…

Web爬蟲利器FireCrawl:全方位助力AI訓練與高效數據抓取。本地部署方式

開源地址:https://github.com/mendableai/firecrawl 01、FireCrawl 項目簡介 Firecrawl 是一款開源、優秀、尖端的 AI 爬蟲工具,專門從事 Web 數據提取,并將其轉換為 Markdown 格式或者其他結構化數據。 Firecrawl 還特別上線了一個新的功…