模二演算法
① 什麼叫按位模2加運算啊
所謂模2加,就是相加後達到2就進位,但只保留一位。比如0+0=0不必進位,所以保留為0。0+1=1不必進位,保留為1。1+1=10,保留為0。這種效果也就是按位異或運算(進行運算的兩位相同位結果為0,不同結果為1)。
② 計算機組成原理中,純小數的模為什麼是2啊
因為存在一個符號位。
模:是計量器具的容量,或稱模數。
在計算機中,機器數表示數據的字長即位數是固定的。其模數的大小: 1)對於n位整數(含一位符號位),則它的模數為2的 n次方 , 2)對於純小數(含符號位),則它的模數總是2。
二進制計數中模數為2的n次方,n為二進制位數,對於純小數,它們的模永遠都是2,因為一旦小數位全為1後就會進位位整數位,所以小數位的周期都是2,即模數(容量)為2。
模2運算是一種二進制演算法,CRC校驗技術中的核心部分。與四則運算相同,模2運算也包括模2加法、模2減法、模2乘法、模2除法四種二進制運算。與四則運算不同的是模2運算不考慮進位和借位,模2算術是編碼理論中多項式運算的基礎。模2算術在其他數字領域中的應用也是很廣泛的。
(2)模二演算法擴展閱讀 :
模2除法具有下列三個性質:
1、當最後余數的位數小於除數位數時,除法停止。
2、當被除數的位數小於除數位數時,則商數為0,被除數就是余數。
3、只要被除數或部分余數的位數與除數一樣多,且最高位為1,不管其他位是什麼數,皆可商1。
模2算術是編碼理論中多項式運算的基礎。模2算術在其他數字領域中的應用也是很廣泛的。
參考資料來源:網路-模2運算
參考資料來源:網路-計算機組成原理
③ 模2除法的運算過程是怎麼樣的
被除數÷除數(4位二進制),從被除數高位起,取4位,>除數,商記為1;<除數,記為0。
怎麼會4個O。因為上一位除數與被除數相等,相減差為3個0,本次除從被除數上拖1位下來,該位正好是0。
供參考
④ 請教模2除法,模2加法,模2減法的具體推算步驟。
1、加法,模二加的運演算法則是:
0+0=00 + 1 = 1 1+ 0 = 1 1+ 1 = 0
理解:兩個二進制數相加不考慮進位,例如01 + 11 = 10,對於兩個數的低位都是1,進行模二和為0,但是沒有進位,所以高位的0 加1 還是1,因為不考慮低位的進位。
2、減法,模二減的運演算法則:
0 - 0 = 0 0 - 1 = 1 1 - 0 = 1 1 - 1 = 0
例: 1 0 1 0
- 0 1 1 0
---------------------
1 1 0 0
上式的減法中,第三位的減法中0-1,如果按照二進制的減法是有借位的,但是對於模二減是沒有借位的,所以才會有第四位中的1-0仍然為1。
細心的同學會發現,其實兩個數的「模二加」和「模二減」的結果都是一樣的,也就是我們說的「異或」,各位親,你們說是不是?
3、乘法,模二乘的運演算法則:
0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1
例如:1011
X111
---------------
1011
1011
1011
-------------------
110001
模二乘與一般二進制乘法的區別是在於下面的加法部分,模二乘的加法部分依然是模二加的法則
4、除法,模二除運演算法則:
模2除法運算定義為:
0÷1=0 1÷1=1
多 位二進制模2除法也類似於普通意義上的多位二進制除法,但是在如何確 定商的問題上兩者採用不同的規則。後者按帶借位的二進制減法,根
據余數減除數夠減與否確定商1還是商0,若夠減則商1,否則商0。多位模2除法採用模2減法,不帶借位的二進制減法,因此考慮余數夠減除數與否是沒有意義
的。實際上,在CRC運算中,總能保證除數的首位為1,則模2除法運算的商是由余數首位與除數首位的模2除法運算結果確定。因為除數首位總是1,按照模2
除法運演算法則,那麼余數首位是1就商1,是0就商0。例如1100100÷1011=1110……110,列豎式計算:
模二除法
⑤ 什麼是模2運算
模2運算是一種二進制演算法,CRC校驗技術中的核心部分,因此,我們在分析CRC演算法之前,必須掌握模2運算的規則。與四則運算相同,模2運算也包括模2加、模2減、模2乘、模2除四種二進制運算。而且,模2運算也使用與四則運算相同的運算符,即「+」表示模2加,「-」表示模2減,「×」或「·」表示模2乘,「÷」或「/」表示模2除。與四則運算不同的是模2運算不考慮進位和借位,即模2加法是不帶進位的二進制加法運算,模2減法是不帶借位的二進制減法運算。這樣,兩個二進制位相運算時,這兩個位的值就能確定運算結果,不受前一次運算的影響,也不對下一次造成影響。
⑥ crc里的模二演算法
是把整個所有位元組看成一組二進制來除,
而且按道理應該一個位一個位的除,
但是由於這個除法具有一些規律,也能一次計算多個位(暢暢扳堆殖瞪幫缺爆畫比如8個位),
這樣你看到的最後計算就是每次都是處理的一個位元組.
另外,實際的crc計算還有一些問題要考慮
(1)任何長度的全0串,crc的結果都是0,
這意味者如果數據最前面被增加或者減少了0,crc無法檢測出來,
為了解決這個問題,一般crc計算會直接指定一個初始值,就是相當於在最前面加了個非0的前綴,這樣就能檢測出這種情況.
(2)一般crc的結果是作為附加數據放在原來數據的末尾,
這種情況下,
如果直接把這個附加了crc的數據做crc計算,會得到0,
這時候也會有(1)的類似問題,
如果直接用拉通的crc是否為0來判斷,
則在最後可能會有多餘的0,
無法檢測出來.
因而有的crc規定最後的crc要做一個變換(比如取反)然後再加在結尾,
這樣就不可以用拉通crc為0來檢查了.
⑦ 要發送的數據為1101011011,採用crc的生成多項式是p(x)= +x+1,求應添加在數據
作二進制除法。
1、發送數據比特序列為1101011011(10比特)。
2、生成多項式比特序列為10011(5比特,K=4),X的指數就是代表第幾位為1,而且1=X的0次方。
3、將發送數據比特序列乘以2的K(由2可知K為4),那麼產生的乘積為11010110110000。
4、將乘積用生成多項式比特序列去除,按模二演算法得到余數1110。
模二演算法就是兩數相減不產生借位,0-1=1。
步驟如如下所示:
(7)模二演算法擴展閱讀:
二進制除法的CRC校驗原理。
RC校驗原理看起來比較復雜,因為大多數書上基本上是以二進制的多項式形式來說明的。其實很簡單的問題,其根本思想就是先在要發送的幀後面附加一個數(這個就是用來校驗的校驗碼,但要注意,這里的數也是二進制序列的,下同),生成一個新幀發送給接收端。
當然,這個附加的數不是隨意的,它要使所生成的新幀能與發送端和接收端共同選定的某個特定數整除(注意,這里不是直接採用二進制除法,而是採用一種稱之為「模2除法」)。到達接收端後,再把接收到的新幀除以(同樣採用「模2除法」)這個選定的除數。因為在發送端發送數據幀之前就已通過附加一個數,做了「去余」處理(也就已經能整除了),所以結果應該是沒有餘數。
如果有餘數,則表明該幀在傳輸過程中出現了差錯。
【詳細說明】「模2除法」與「算術除法」類似,但它既不向上位借位,也不比較除數和被除數的相同位數值的大小,只要以相同位數進行相除即可。模2加法運算為:1+1=0,0+1=1,0+0=0,無進位,也無借位;模2減法運算為:1-1=0,0-1=1,1-0=1,0-0=0,也無進位,無借位。
相當於二進制中的邏輯異或運算。也就是比較後,兩者對應位相同則結果為「0」,不同則結果為「1」。如100101除以1110,結果得到商為11,余數為1。
參考資料來源:網路--CRC校驗
⑧ 二進制求余數(模2演算法),怎麼用C語言實現
求得結果是返回得到的余數么?是轉換為二進制還是??
如果是轉換為二進制則代碼如下:
//test3.cpp:定義控制台應用程序的入口點。
//
#include"stdafx.h"
#include<stdio.h>
#include<iostream>
#include<math.h>
usingnamespacestd;
voidcomput(intx,char*s);
int_tmain(intargc,_TCHAR*argv[])
{
intx,i;
chars[32];
scanf("%d",&x);
comput(x,s);
for(i=strlen(s),i--;i>=0;i--)
{
cout<<s[i];
}
printf(" ");
system("pause");
return0;
}
voidcomput(intx,char*s)
{
inty;
inti=0,j;
while(true)
{
if(x%2==0)
{
s[i++]='0';
}
else
{
s[i++]='1';
}
j=x/2;
x=j;
if(j==0)
{
s[i]='