電腦數據的表示

来源:https://www.cnblogs.com/zeroy610/archive/2023/10/26/17789448.html
-Advertisement-
Play Games

電腦數據的表示 1. 數值數據的表示 1.1 各種進位數的表示 二進位 (Binary) :以 0b 或 0B 開頭,字元僅含0和1. 用下標2或者數字後面加B表示。如 $(1011)_2$ 或 $1011B$ 八進位 (Octal) :以 0o 或 0O 開頭,字元含0-7. 用下標8或者數字後 ...


電腦數據的表示

1. 數值數據的表示

1.1 各種進位數的表示

  • 二進位 (Binary) :以 0b0B 開頭,字元僅含0和1.

    • 用下標2或者數字後面加B表示。如 $(1011)_2$ 或 $1011B$
  • 八進位 (Octal) :以 0o0O 開頭,字元含0-7.

    • 用下標8或者數字後面加O表示。如 $(17)_8$ 或 $17O$
  • 十六進位 (Hexadecimal) :以 0x0X 開頭,字元含0-9、a-f(代表10-15).

    • 用下標16或者數字後面加H表示。如 $(a1b1)_{16}$ 或 $a1b1H$

1.2 進位轉換

R進位與十進位的轉換

  • R進位轉十進位:按位權展開。計算每位數字與該位位權乘積的代數和然後相加。
  • 十進位轉R進位:除以 R 逆序取餘。

二、八、十六進位互轉

  • 二轉八進位:從右往左每三位轉一位八進位,最左邊不足三位添0補齊。反之八進位每一位轉三位二進位。

  • 二轉十六進位:從右往左每四位轉一位十六進位,最左邊不足四位添0補齊。反之十六進位每一位轉四位二進位。

python中的相關函數:

  1. int(*x*,base=10)

    這個函數按照base進位對數x進行解釋,返回一個使用數字或字元串生成的整數int對象,無實參返回0。

    其中x數字或字元串base為進位,取值範圍為[2,36]和0。

    一個進位為n的整數包含0到n-1的整數,其中a-z(A-Z)表示10到35。

    進位為0將會按照x字面的首碼進行解釋,結果是2、8、10、16中的一個。

要清楚的一點是,在python中帶有首碼的數字,例如0xa0o120b1010它們的類型(type)都是 int 整數類型。
如果想知道它們十進位數值,可以直接print,或 print(int(x)) ,也可以 int(str(x),base=0)(?).

對這個函數的使用,主要分為三種情況:

  • x為int類型:無論帶不帶首碼,這個數的進位已經清楚,它表示一個確定大小的數字。該函數無法對一個進位清楚非字元串類型進行轉換(啟用base關鍵字)。
  • x為str字元串類型:
    • 帶首碼:表明這個數的進位已經清楚,base只能等於其首碼或0。
    • 不帶首碼:根據用法自由發揮。註意沒有首碼且令base=0的話應註意x其形式。比如int("010",base=0)是非法的。因為解釋器認為x是十進位數,但x形式是錯誤的。
  • x為byte類型:暫時空缺。
x=int(156,base=2) #報錯
x=int(0x156,base=0) #報錯

x1="0101" #字元串
y1=int(x1,base=2) # 結果為整數5
y2=int(x1,base=8) # 結果為整數65
y3=int(x1,base=16) # 結果為整數257
y4=int(x1,base=35) # 結果為整數1226

x2="0xa5f1"
y5=int(x,base=16) # 結果為整數42481
y6=int(x,base=0) # 結果為整數42481
  1. hex(x)

將整數轉換為以0x為首碼的十六進位字元串

  1. bin(x)

將整數轉換為以0b為首碼的二進位字元串

  1. oct(x)

將整數轉換為以0o為首碼的八進位字元串

1.3 機器碼的表示

電腦中數的主要類型

  • 整數(定點數)
    • 無符號整數
      • 8位($0~2^{8}-1$)
      • 16位($0~2^{16}-1$)
      • 32位($0~2^{32}-1$)
    • 有符號整數
      • 8位($-27~2-1$)
      • 16位($-2{15}~2-1$) 16位整數
      • 32位($-2{31}~2-1$) 短整數
      • 64位($-2{63}~2-1$) 長整數
  • 浮點數
    • 32位(單精度浮點數)
    • 64位(雙精度浮點數)
    • 128位(擴充精度浮點數)

真值、字長、機器數

  • 機器數:0或1 + 二進位絕對值

    • 電腦不認識除了0和1之外的任何符號,因此要專門留出一位用來表示正負號。
    • 將符號數字化的數,是數字在電腦中的二進位表示形式。
  • 真值:正負號 + 二進位絕對值

    • 電腦中的二進位機器數分為“有符號數”和“無符號數”兩種。
    • “無符號數”就是二進位數的每一位都代表對應位的數值;而在“有符號數”中規定最高位用來表示數據符號,其中1代表負,0代表正,這樣一來機器數本身就不等於真正的數值了。例如有符號數10000101,其最高位1代表負,所以餘下的“0000101”才是數值本身,所以其真正數值是-5,而如果是無符號數,則10000101所代表的是133。為區別起見,把帶符號位的機器數所對應的真正數值稱為機器數的“真值”。例:00100001的真值=0 0100001=+33(正號可以不寫,可以直接寫成33),10100011的真值=1 0100011=-35。
  • 字長

    • :指電腦進行數據處理時,一次存取加工和傳送的數據長度(字長度)。一個字通常是位元組的整數倍。

    • 字長 是指電腦一次可處理的二進位數的碼位長度,是電腦進行數據存儲和數據處理的運算單位。如我們通常所指的32位處理器,就是指該處理器的字長為32位,也就是一次能處理32位二進位數。通常稱16位是一個字,32位是一個雙字,64位是兩個雙字。

    • 數值的轉換結果是與字長有關的。如果電腦字長為8位,十進位中的數+5轉換成二進位就是00000101,-5轉換成二進位就是10000101;但如果字長是16位,+5轉換的結果就是00000000 00000101,而-5轉換成二進位就是10000000 00000101了。也就是對應的機器數要轉換為字長所代表的位數。

    • 字長越長代表電腦的處理能力越強,可以處理的數越大。

      • 在8位字長中,除去符號位,實際可以處理的數值大小範圍為[-127,-0]~[+0,127](即$2^7 -1$),共256個數。

      • 16位字長可以處理的數值大小是[-32677,-0]~[0,32767]($2^{15} -1$)。

      • 64位字長電腦可以處理的二進位數位位長度最大為64位,去掉符號位,則表示電腦可以處理的最大二進位數為 $2^{63}-1$,最小二進位數就是 $-2^{63}$。

    • 註意 以上的“-0”與“0”的機器數是不一樣的,在8位字長中,-0為1 0000000,而+0為0 0000000;在16位字長中,-0為1 0000000 00000000,而+0為0 0000000 00000000。所以在二進位的機器數中,0也有兩個(-0和0),且表示形式並不一樣。

設機器字為8b字長,數N1的真值為 +1001110,數N2的真值為 -1001110,則N1、N2對應的機器數為:
01001110
11001110

原碼表示法

符號位加數值的二進位。

有正零和負零之分。

反碼表示法

  • 正數的補碼、反碼和原碼都相同

  • 負數的符號位與原碼、補碼相同,數值將原碼的數值位按位取反。

補碼表示法

原碼的計算不方便,因此引入補碼的概念

  • 正數的補碼、反碼和原碼都相同

  • 負數的的補碼是先把除符號位外其他各位取反,再在末位加1。

TH 定點整數 定點小數
原碼 $-(2{n-1}-1),2-1$ $(-1,1)$
反碼 $-(2{n-1}-1),2-1$ $(-1,1)$
補碼 $-2{n-1},2-1$ $[-1,1)$
  • 運算前將所有參與運算的數據轉換為補碼
  • 將轉換後的數值進行運算
  • 運算結果再次求補碼,得到最後的結果

移碼表示法

1.4 二進位邏輯運算

  • 與運算 AND

    • 又稱邏輯乘。用符號$\land$ 或 ·表示
      對應位均為1結果才為1.
  • 或運算 OR

    • 又稱邏輯加。用符號 $\lor$ 或+表示
      對應位有一個為1結果就為1.
  • 非運算 NOT

    • 按位取反
  • 異或運算 XOR

    • 用符號$\bigoplus$ 表示
      對應位相同結果為0 ,不同結果為1。

2. 非數值數據的表示

  • 非數值數據:文字和符號(字元)、圖像、聲音等
  • 非數值數據的表示:對其進行二進位編碼。任何數據存儲到電腦中都是二進位數。

字元編碼

  • 編碼:編碼是將源對象內容按照某種標準轉換為另一種格式內容。解碼是和編碼對應的,它使用和編碼相同的標准將編碼內容還原為最初的對象內容。
  • 碼點:一個編碼表中的某個字元對應的代碼值。比如ASCII中字元 A 的碼點是65
  • 字元集:某種編碼標準所支持的所有字元及其對應碼點的集合。(書寫系統字母與符號的集合)
    • 字元編碼:字元到存儲在電腦上的內容(特定的位元組或位元組序列)之間的映射,是一種規則。通常特定的字元集採用特點的編碼方式。一種字元集可能有多種編碼方案,比如 utf-8utf-16

ASCII碼

常用的7位 $ASCII$ 碼(American Standard Code for Information Interchange碼,即美國信息交換標準代碼)的每個字元都由7個二進位位b6~b0 表示,有128個編碼,最多可表示128種字元。其中包括:

  • 10個數字09:30H~39H,48~57(十進位);
  • 26個小寫字母az:61H~7AH ,97~122;
  • 26個大寫字母AZ:41H~5AH ,65~90;
  • 各種運算符號和標點符號等。

在電腦中,用1B(一個位元組)表示一個ASCII碼,其最高一位(b7位)填0,餘下的7b可以給出128個編碼,表示128個不同的字元和控制碼。

其中95個編碼,對應著電腦終端能敲入並且可以顯示的95個字元,印表機設備也能列印這95個字元,如大小寫各26個英文字母,0—9這10個數字元,通用的運算符和標點符號+,-,*,/,>,=,< 等等。

UTF-8編碼

  • Unicode字元集
    • 在Unicode中,每個字元占據一個碼位/Unicode 編號(用4位十六進位數表示,Code point:U+ FFFF),字元集中的字元與Unicode 編號一一映射。如 U+ 0000 為“Null”,U+ 597D=""。Unicode字元集共定義了 1 114 112 個這樣的位,使用從0到10FFFF的十六進位數唯一地表示世界上幾乎所有字元。NCR(Numeric Character Reference),以「&#」開頭的後接十進位數字,以「&#x」開頭的後接十六進位數字。

由於電腦存儲數據通常是以位元組為單位的,而且出於相容之前的ASCII(0x00-0x7F)、節省存儲空間等諸多原因,需要一種具體的編碼方式來對字元碼位進行標識。規定每個字元的Unicode編號如何存儲(用一個位元組還是多個位元組存儲,用哪些位元組來存儲),常見的基於Unicode字元集的編碼方式有UTF-8UTF-16UTF-32

同一段二進位,每一個位元組一個編號還是每兩個位元組一個編號,解碼方式不一樣,得到的編號不一樣,對應的映射字元也不同,這就是亂碼的原因。“錕斤拷”、“燙”就是這樣來的。

漢字編碼

對於漢字,電腦的處理技術必須解決三個問題:

  • 漢字輸入
  • 漢字儲存與交換
  • 漢字輸出

它們分別對應著漢字輸入碼、內碼、字模碼的概念。
因此,漢字編碼系統存在以下三種編碼:

  1. 漢字輸入碼
  2. 漢字內碼
  3. 漢字字模碼

漢字輸入碼

漢字輸入碼也稱 外碼 ,是為了將漢字輸入電腦而編製的代碼,是代表某一漢字的一串鍵盤符號。
漢字輸入碼種類:

  • 數字編碼:如區位碼、國標碼、電報碼等。
  • 拼音編碼:如全拼碼、雙拼碼、簡拼碼等。
  • 字形編碼:如王碼五筆、鄭碼、大眾碼等。
  • 音形編碼:如表形碼、智能ABC等。

兩種典型的數字編碼:

  • 區位碼:是將國家標準局公佈的6763個兩級漢字分為94個區,每個區分94位,實際上把漢字表示成二維數組,每個漢字在數組中的下標就是區位碼。
    • 例如“中”字位於54區48位,“中”字的區位碼即為“5448”。
  • 國標碼:將區位碼加2020H,占用兩個位元組。
    • 例如“中”字的國標碼為區位碼5448的區碼和位碼轉化為16進位,為3630H,再加2020H得國標碼5650H。
  • 漢字字元集與編碼
    • 1981年,GB2312-80國家標準,其字元及編碼稱為國標碼又叫國際交換碼。
    • GB2312字元集的構成:
      一級常用漢字3755個,按漢語拼音排列
      二級常用漢字3008個,按偏旁部首排列
      非漢字字元682個
      一般用2個位元組來存放漢字;
      漢字分區,每個區94個漢字;

漢字內碼

漢字內碼是用於漢字信息的存儲、交換、檢索等操作的機內代碼,一般採用兩個位元組表示。

  • 漢字可以通過不同的輸入法輸入,但其內碼在電腦中是唯一的。

  • 英文字元的機內代碼是7位的ASCII碼,當用一個位元組表示時,最高位為“0”。為了與英文字元能相互區別,漢字機內代碼中兩個位元組的最高位均規定為“1”。

  • 機內碼等於漢字國標碼加上8080H。

    • 例如“中”字的機內碼為5650H+8080H=D6D0H。

漢字字模碼

漢字字模碼又稱漢字字形碼,它是將漢字字形經過點陣數字化後形成的一串二進位數,用於漢字的顯示和列印。

  • 根據漢字輸出的要求不同,點陣有以下幾種:

    • 簡易型漢字:16×16, 32位元組/漢字
    • 普通型漢字:24×24, 72位元組/漢字
    • 提高型漢字:32×32,128位元組/漢字。
  • 漢字字型檔:將所有漢字的字模點陣代碼按內碼順序集中起來,構成了漢字型檔。

  • 漢字字形點陣中每個點的信息用一位二進位碼來表示,“1”表示對應位置處是黑點,“0”表示對應位置處是空白。
    例如16×16點陣,每個漢字就要占32個位元組

image

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需求背景:做倒計時圖片; 實現思路:先準備好一張圖片作為背景圖,用python往圖片上添加天數,保存圖片;從0-69天,一共生成70張圖片 背景圖如圖: 代碼如下: # 這個程式用來生成70張倒計時圖片 from PIL import Image, ImageDraw, ImageFont for ...
  • RA 功能簡介 在公共密鑰基礎設施(PKI)中,CA(Certificate Authority,證書頒發機構)系統的RA(Registration Authority,註冊機構)是PKI體繫結構的重要組成部分。RA在CA系統中扮演著關鍵角色,負責處理用戶的身份驗證和註冊請求,然後將這些請求傳遞給C ...
  • 本文詳盡地探討了Go語言的內建命令集,包括但不限於go build、go run、go get等。文章首先列舉了所有常用的Go命令,並用表格形式簡潔地解釋了它們的功能。隨後,我們逐一深入講解了每個命令的使用說明、應用場景,以及實際操作中可能遇到的輸出結果。 關註【TechLeadCloud】,分享互 ...
  • 最近有用戶反饋測試環境Java服務總在凌晨00:00左右掛掉,用戶反饋Java服務沒有定時任務,也沒有流量突增的情況,Jvm配置也合理,莫名其妙就掛了 ...
  • 在Java編程中,我們經常需要找出兩個列表(List)中的重覆元素。在本文中,我們將探討三種方法來實現這一目標。 ...
  • 來源:https://www.cnblogs.com/liuboren/p/17017421.html 0.前言 本篇文章是<<代碼整潔之道>>的學習總結, 通過這篇文章你將瞭解到整潔的代碼對項目、公司和你的重要性,以及如何書寫整潔的代碼. 通過命名、類、函數、測試這四個章節,使我們的代碼變得整潔. ...
  • MDI窗體的相關學習使用 1、設置MDI父窗體 在屬性中找到IsMdiContainer選項,設置為True 2、添加MDI子窗體,在項目中依次選擇添加->窗體,然後一直預設即可 添加後的項目目錄(Form1為父視窗,Form2、Form3為子視窗) 3、在Form1.cs中,創建對應MDI子視窗的 ...
  • 【學習課程】:【【小白入門 通俗易懂】2021韓順平 一周學會Linux】 https://www.bilibili.com/video/BV1Sv411r7vd/?p=14&share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e054 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...