主頁 >  其他 > 從近世代數的角度理解補碼

從近世代數的角度理解補碼

2022-12-10 06:51:38 其他

介紹

模數加法形成了一種數學結構,成為阿貝爾群(Abelian group),這是以丹麥數學家阿貝爾的名字命名的,

前置知識

定義1. 設\(a,b\in Z\),如果存在\(q\in Z\)使得\(a=qb\),則稱\(b\)整除\(a\),記為\(b|a\)

定義2. 設\(a,b\in Z\)\(b>0\)\(a=qb+r\)\(q\in Z\)\(0\leq r<b\),則稱\(r\)\(a\)除以\(b\)所得到的余數,記為\(a\bmod b\)

定義3. 設\(a,b,n\in Z\)\(n>0\),如果\(a\bmod n=b\bmod n\),則稱\(a\)\(b\)\(n\)同余,記為\(a \equiv b\pmod{n}\)

定理1. \(\forall a,b,n\in Z, n>0, a\equiv b\pmod{n}\)等價于\(n|(a-b)\)

定理2.

  1. \(\forall a\in Z, a \equiv a \pmod{n}\)
  2. \(\forall a, b\in Z\),如果\(a\equiv b \pmod{n}\),則\(b\equiv a\pmod{n}\)
  3. \(\forall a,b,c\in Z\),如果\(a\equiv b\pmod{n}\)并且\(b\equiv c\pmod{n}\),則\(a\equiv c\pmod{n}\)
  4. \(\forall a,b,k\in Z\),如果\(a\equiv b\pmod{n}\),則\(a+k\equiv b+k\pmod{n}\)
  5. \(\forall a,b,c,d\in Z\),如果\(a\equiv b\pmod{n}\)并且\(c\equiv d\pmod{n}\),則\(a+c\equiv b+d \pmod{n}\)
  6. \(\forall a,b,k\in Z\),如果\(a\equiv b\pmod{n}\),則\(ak\equiv bk\pmod{n}\)
  7. \(\forall a,b,c,d\in Z\),如果\(a\equiv b\pmod{n}\)并且\(c\equiv d\pmod{n}\),則\(ac\equiv bd \pmod{n}\)
  8. \(\forall a,b\in Z\)\(ab \bmod n=(a\bmod n)(b\bmod n) \bmod n\)

定義4. 設\(n\in Z\)\(n>0\)\(\forall x\in Z\),定義\([x]=\{y|y\equiv x \pmod{n}\}\),稱為整數集\(Z\)上在模\(n\)同余的等價關系下的一個等價類,

例.

\(4\)同余關系的所有等價類為:

  • \([0]=\{\cdots,-8,-4,0,4,8,\cdots\}\)
  • \([1]=\{\cdots,-7,-3,1,5,9,\cdots\}\)
  • \([2]=\{\cdots,-6,-2,2,6,10,\cdots\}\)
  • \([3]=\{\cdots,-5,-1,3,7,11,\cdots\}\)

定理3. 設\(n\in Z\)\(n>0\)\(\forall x,y\in Z\)\([x]=[y]\)當且僅當\(x\equiv y\pmod{n}\)

模數加法構成阿貝爾群

  1. \(Z_n=\{[0],[1],\cdots,[n-1]\}\)為整數集\(Z\)上在模\(n\)同余的等價關系下所有等價類之集,
  • \(Z_n\)上定義加法運算“\(+\)”如下:

  • \(\forall [i],[j]\in Z_n,[i]+[j]=[i+j]\),則\((Z_n,+)\)構成一個交換群;

  • \(Z_n\)上定義乘法運算“\(*\)”如下:

  • \(\forall [i],[j]\in Z_n,[i]*[j]=[i*j]\),則\((Z_n,*)\)構成一個交換幺半群,

? 證明:

  • \(\forall i,j,i',j'\in Z\),如果\([i]=[i']\)\([j]=[j']\),則\([i+j]=[i'+j']\),這驗證了“\(+\)”為一個運算,

  • \(\forall i,j,k\in Z\)\(([i]+ [j])+ [k]=[i+j]+ [k]=[(i+j)+k]\)\([i]+ ([j]+ [k])=[i]+ [j+k]=[i+(j+k)]\)\(([i]+ [j])+ [k]=[i]+ ([j]+ [k])\),這驗證了加法運算\(+\)滿足結合律,

  • \(\forall i\in Z\)\([0]+[i]=[i]+[0]=[i]\),這驗證了\([0]\)為單位元,

  • \(\forall i\in Z\)\([n-i]+[i]=[i]+[n-i]=[n]=[0]\),這說明\([i]\)有逆元,

    以上驗證了\(Z_n\)對于加法運算“\(+\)”構成一個群,

  1. \(Z'_n=\{0,1,2,\cdots,n-1\}\),在\(Z'_n\)上定義運算"\(\oplus\)"如下:\(i\oplus j=(i+j)\bmod n\),則\((Z'_n,\oplus)\)構成一個群,

? 證明:

  • \(\forall a,b,c\in Z'_n,(a\oplus b)\oplus c=a\oplus (b\oplus c)\),結合律,

  • \(((a+b)\bmod n+c)\bmod n=(a+(b+c)\bmod n)\bmod n\)

  • \(((a+b)\bmod n+c)\bmod n=(a+b+c)\bmod n\)

  • \((a+(b+c)\bmod n)\bmod n=(a+b+c)\bmod n\)

  • \(0\oplus a = (0+a)\bmod n = a\)

  • 如果\(a\neq 0\),則\((n-a)\oplus a = (n-a+a)\bmod n = 0\)\(0\oplus 0=(0+0)\bmod n=0\)

舉例

設用\(n\)個二進制位表示一個整數\(x\)\(x\)的補碼定義為:

  • 如果\(x\geq 0\),則\(x\)的補碼為\(x\)的原碼;

  • 如果\(x < 0\), 則\(x\)的補碼為\(x+2^n\)的原碼,

1:

設用8個二進制位表示一個整數,計算7-7補碼

解:

  • 因為\(7\geq 0\),因此7的補碼為7的原碼,即7的補碼為0000_0111,

  • 因為\(-7 < 0\),因此-7的補碼為\(-7+2^8\)的原碼,即-7的補碼為1111_1001,

\(-7\)的補碼還可以這樣求解:

  • 先計算7的原碼,得到0000_0111
  • 然后取反加1,得到\(-7\)的補碼為1111_1001,

例2:

設用8個二進制位表示一個整數,計算-128補碼

  • 因為\(-128 < 0\),因此-128的補碼為\(-128+2^8\)的原碼,即-128的補碼為1000_0000,

  • 同樣的,\(-128\)的補碼還可以這樣求解:先計算128的原碼,得到1000_0000,然后取反加1,得到\(-128\)的補碼為1000_0000,

如果用\(n\)個二進制位表示一個整數,用補碼表示的數字的范圍為\(-2^{n-1}\sim 2^{n-1}-1\)

對于補碼而言:

  • 如果首位為0,其表示的是大于等于0的整數,
  • 如果首位為1,其表示的是負數,

例3

如果用8個二進制位表示一個整數,00001010為哪個整數的補碼?10001010為哪個整數的補碼?

  • 因為00001010的首位為0,它為一個大于等于0的整數的補碼,這個整數為\(10\)
  • 因為10001010的首位為1,它為一個負數的補碼,這個負數為\(138-2^8=-118\)

對補碼加法的分類討論

計算機中普遍采用補碼表示數字的原因是對于負數的加法可以采用與自然數的加法一樣的加法器 ,

\(x\)\(y\)為任意的兩個整數,分以下4種情況討論:

\(x\geq 0\)\(y\geq 0\)

  • 此時\(x\)的補碼為\(x\)的原碼,
  • \(y\)的補碼為\(y\)的原碼,
  • 按照自然數相加計算得到\(x+y\),恰為\(x+y\)的補碼,

\(x < 0\)\(y \geq 0\)

  • 此時\(x\)的補碼為\(x+2^n\)的原碼,
  • \(y\)的補碼為\(y\)的原碼,
  • 按照自然數相加計算得到\(x+2^n+y=(x+y)+2^n\)
  • 如果\(x+y<0\),則得到的恰為\(x+y\)的補碼;
  • 如果\(x+y\geq0\),計算結果的第\(n\)位(從最右邊數起,依次為第0位,第1位,\(\cdots\),第\(n-1\)位,第\(n\)位)會自動拋掉,這恰好就是在\(\bmod 2^n\)

\(x \geq 0\)\(y < 0\)

  • 此時\(x\)的補碼為\(x\)的原碼,
  • \(y\)的補碼為\(y+2^n\)的原碼,
  • 按照自然數相加計算得到\(x+(y+2^n)=(x+y)+2^n\)
  • 如果\(x+y<0\),則得到的恰為\(x+y\)的補碼;
  • 如果\(x+y\geq0\),計算結果的第\(n\)位會自動拋掉,

\(x < 0\)\(y < 0\)

  • 此時\(x\)的補碼為\(x+2^n\)的原碼,
  • \(y\)的補碼為\(y+2^n\)的原碼,
  • 按照自然數相加計算得到\((x+2^n)+(y+2^n)=(x+y)+2^n + 2^n\),計算結果的第\(n\)位會自動拋掉,于是最終得到的計算結果為\((x+y)+2^n\),恰為\(x+y\)的補碼,

為什么是取反加一

相信大家一開始學習補碼的時候都是記為取反加一,然而在看了本篇博客后,你或許明白了為什么是這樣的,

\(x\)為任意一個8位有符號整數(char),也就是說它的二進制位數為8位,

$x \geq 0 $

  • 此時\(x\)的補碼為\(x\)的原碼,

\(x \lt 0\)

  • \(y = -x\),即\(y\)\(x\)的相反數,y為正數,
  • \(a\)\(y\)的二進制表示(原碼),\(b\)\(x\)的二進制表示(補碼),
  • 那么由前面的知識,可以知道,\(a\)\(b\) 在模\(2^n\)(n 為 二進制位數,這里為8)同余運算上,是互為逆元,
  • 那么,\(a\oplus b=(a+b)\bmod 2^n = (e) \bmod 2^n = 0 = (2^n) \bmod 2^n\)
  • 所以,我們可以讓\(a + b = 2^n\),(讓\(a + b = 0\)是一樣的,原因在下),
  • 好,現在計算\(b\)
  • 對于一個n位二進制數,\(2^n\) 表示為\(1\_0000\_0000\) ,一共后面為\(n\)個0,(所以在計算機里,這個最高的1是不不存在的,是會被拋棄的,那么也可認為\(a + b = 0\)
  • 現在我們如何湊出這個數?顯然,\(a + a' = 1111\_1111\),(\(a'為對a按位取反, 結果一共n個1\)),
  • 則,\(a + a' + 0000\_0001 = 1111\_1111 + 0000\_0001 = 1\_0000\_0000\)
  • 這時候\(b = a' + 0000\_0001\), 即取反加一,

補碼的連續性

現在我們研究下 -1,

  1. 可以根據前面的知識,我們寫出\(1\) 的二進制表示(8位)\(0000\_0001\)
  2. 然后取反加一,得\(1111\_1111\)
  3. 現在令\(-1 = e + (- 1) = 0 + (- 1) = 0 - 1\)
  4. 而變為二進制表示后\(0 - 1 = 0000\_0000 - 0000\_0001\)
  5. 在第9位上,可以借1,所以 \(原式 = 1\_0000\_0000 - 0000\_0001 = 1111\_1111\)

補碼這樣的連續性使得我們在進行有符號數加減法時不需要考慮其他運算規則,直接相加即可,


負權

補碼所表示的數,我們通常這樣計算:

設表示的數為\(w\) ,二進制數表示為\(s_ns_{n-1}s_{n-2}····s_{2}s_{1},即\)\(s_i (1 \le i \le n)\)\(s_n\)為符號位,

  • 表示負數,\(s_n = 1時\)\(w = 2^{n - 1} * (-1) + \sum_{i=0}^{n - 2} 2^{i}\)
  • 表示非負數,\(s_n = 0時\)\(w = \sum_{i=0}^{n - 2} 2^{i}\)

表示非負數很好理解,就是進制轉換

那么負數為什么要有負權呢?為什么最高位代表的權值是負的?

  • 如果最高位我們視為正權,得到的值記為\(w'\)\(w' = \sum_{i=0}^{n - 1} 2^{i}\)
  • 顯然,由之前的理論可以知道,\(w' 與 (-w) 互為逆元\),即\(w’ + (-w) = 2^n = 0 (\bmod 2^n)\)
  • 但是\(w + (-w) = 0 = 0(\bmod 2^n)\)相反數也是互為逆元,
  • 那么它兩就是等價類啊,但是它兩的二進制表示是一樣的,只是計算的方式不一樣,
  • 根據等價類的定理3, \([w']=[w]\)當且僅當\(w'\equiv w\pmod{2^n}\)
  • 那么,因為\(w' \gt w\), 則\(w' = w + 2^n\),則\(w = w' - 2^n\)
  • \(2^n = 2^{n-1} + 2^{n-1}\),也就說我們得減去個最高位的1,
  • 既然這樣,令最高位的正權屬性變為負權,不就正好是兩個嗎?
  • 所以,定義最高位為1時,為負權 ,

為什么是補碼?

現在,讓你設計一個正數負數都可以表示的運算系統,你會想到令一位為標志位 (Flag),來特殊地表示這個數是正數還是負數,

那么,計算機科學家們是先想到這樣的編程思想(Flag位),還是先由近世代數進一步研究發現的呢?

我認為是由近世代數這樣的思想進一步推廣研究發現的,

毫無疑問,補碼這些性質奠定了計算機科學的基礎,


后記

這篇博客主要參考我的近世代數老師的講義,他在上課時說,他當時在研究生推免答辯就問為什么計算機中要用補碼,結果沒有人答得上來,

參考資料:王義和.離散數學引論[M].哈爾濱:哈爾濱工業大學出版社,2007

本文來自博客園,作者:江水為竭,轉載請注明原文鏈接:https://www.cnblogs.com/Az1r/p/16968337.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539632.html

標籤:其他

上一篇:NOIP2022第二題喵了個喵題解與SPJ

下一篇:有向圖的拓撲排序

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more