在電子通信領域,會用到很多二進制和“模2”運算。什麼是“模”?與“進制”有什麼不同?為什麼需要使用模運算?
1、什麼是進制?
“進制”就是數數(數一下有幾本書)和計算時的一種“進位制度”系統。這個系統是人為制定的。
我們日常生活中使用的是“十進制”,電子通信領域大量使用“二進制”。
一種“進制”需要有一些規則,這些規則綜合構成“進位制度”系統:
① 從0遞增,每次遞增都按照加1計算;(這是四則運算的前提)
② 可以遞增到無限大;
③ 遞增過程中,數字的位數随着“進制”增加;(構成一個數字的位,叫做權)
④ 數字隻有一位的時候,這些數字被稱作“進制”的基數;
⑤ 每種進制都有自己獨有的“按進制”計算規則,也就是“進位”規則。
這5條規則是構成一種計數系統的前提。通常,最引人關注的規則就是“進位”規則。其他規則較少被注意到。但是,實際上,這5條規則中的任何一種規則被改變,都能産生一種新的計數系統。
如果僅有“進位”規則發生變化,其他規則不變,就會産生很多種“進制”,比如二進制、3進制、7進制甚至371進制。一般用到的是二進制。
可以認為:所有的其他“進制”都是十進制演變出來的,計數習慣和運算習慣都沿用十進制。
常見的十進制和二進制計算
上圖的計算方法衆所周知。但是如果跟“模運算”相比較的話,會發現很大不同。
2、什麼是“模”?“模”和“進制”有什麼不同?
如果說十進制是一個計數世界的話,二進制是另一個規則類似的子計數世界。構成兩者的5條規則中,隻有具體的基數和逢基進位是不同的,其他都相同。如果将第②條規則“可以遞增到無限大”,改變成“僅可以遞增到某個有限大的值”就産生了另一種計數世界,這就是“模”。
“模”,是一個比較“令人感到陌生”的名詞,但是在生活中卻很早就普遍使用了。如鐘表的表盤。時間的長度是無限的,如果想把無限的時間長度數值放進表盤有限的刻度上,有一個簡單的辦法,就是讓表示時間長度的數值不停地歸0。
這個表盤數字世界就是“模12”。數字從0開始加1遞增,遞增到12,不進位而是歸零。這與進制的處理方法截然相反。也是“模”與“進制”的最突出的區别。
從0到11的數字是十進制數字,可以稱為“模元”,而數字12可以稱為“模值”。(如果有相關的著作對這些名詞有更加合适的稱謂,請自行轉換。)
模元可以是十進制數字,也可以是二進制或者其他進制數字。
模元之間的遞增方式也可以不是按照加1遞增。如果是這樣的話,按模運算會與常規的運算不同。
至此,關于“模”的概念應該有一個大緻的總結:
① “模”是一種數學計數系統,或者說一種計數模型;
② 模值可以按照自己的需要自由指定;
③ 模元可以是任何進制數字,遞增方式可以不是加1遞增;
④ 模内,數字遞增到模值,不會進位,而是歸零,重新遞增。
用語言來描述的話,“模”就是一個封閉的圓形計數系統。
模與進制的區别是:
模,滿則歸零;
進制,滿則溢出。
如何把任何一個數字放進已經定義好的模中呢?
把十進制數字215放在模12内:
就說215在模12内等于11。這個方法可以是定義模的辦法。但是這樣建立的模有兩個前提條件:從0開始計數,每次按照加1遞增。
如果模元不是從0開始,模元不按照遞增排序,或者按照加某個數值遞增,除模取餘方法可能需要做一些改變。這種情況出現在某些編碼中。
3、模運算原理
先看模12運算。
在模12中,
5 4=9;
5-8=9。
可以說,4和8是互補的。這也是二進制中“補數”的含義。
7乘以8,可以理解為從0點開始,指針順時針走8次,每次走7格,最後指針指向數字8點。所以模12的7×8=8。
按模除法一般用于把任意數字放入定義好的模中,實際的用途類似于鐘表的用途。
最簡單的是“模2”。用一個表盤來描述模運算。
模2加:
0 1=1;指針從0點順時針走1格,指向1點。
1 0=1;指針從1點順時針走0格,指向1點。
0 0=0;
1 1=0;指針從1點順時針走1格,指向0點。
由此定義了一種邏輯運算:異或。異或的運算符号為
,比較形象,意味着在一個圓圈内進行的加法運算。
模2加法的特點可以描述為:
不同得1,相同得0。在編碼中大量應用。
模2減:
0-1=1;指針從0點逆時針走1格,指向1點。
1-0=1;指針從1點逆時針走0格,指向1點。
0-0=0;
1-1=0;指針從1點逆時針走1格,指向0點。
可以看出,模2減和模2加,結果完全一樣。所以在計算模運算的除法時,常常用加法直接代替減法。編碼中我們隻能看到模2加,看不到模2減,就是這個原因。
模2乘:
0×0=0;指針從0點順時針走0次0格,指向0點。
0×1=0;指針從0點順時針走1次0格,指向0點。
1×0=0;指針從0點順時針走0次1格,指向0點。
1×1=1。指針從0點順時針走1次1格,指向1點。
這就是邏輯“與”運算。和十進制的乘法思路一樣。
模2除:
0÷1=0;
1÷1=1。
可以看出,以2為模,其實模元并不是二進制,而是在十進制基礎上定義的一種模。隻不過模2比較特殊。
一種比較特殊的按模除法,在二進制基礎上定義的模。如二進制數字1100100除以1011定義的一種二進制模,模值為1011。應該稱之為“模1011”。如果把1100100放進這個模内,對應的模元就是除法的餘數:
可以看出,二進制的按模計算不同于十進制的按模計算。二進制的按模計算過程中,對每一位使用“模2運算”。那麼為什麼要使用“模2運算”呢?
前面說了,模是一種為了實現某種目的人為定義的計數系統,按模計算方法也是人為定義的。在編碼的過程中,可以不使用模2加法進行按模計算,但是如果統一使用模2加法能夠讓按模運算具有某些特殊性質,還能夠大幅度降低硬件或軟件的難度,為什麼不用呢?
偉大的科學家發現了按模運算的一種特殊性質:
如果一個二進制數字T(x)以xn 1為模,每次T(x)按照乘2遞增,則模xn 1内的模元是一組循環碼組。
xn 1是一種二進制數的多項式表示法。表示二進制數字有n 1位,最高位和最低位都是1,其他位都是0。
這條性質能夠用來建立CRC編碼。如以10001為模值,建立一個模。用10011做被除數進行模運算:
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!