摩二演算法
Ⅰ 7. 現要發送的數據是1101011011,採用的CRC生成多項式為為G(X)=X4+X+1,試求校驗碼。如果接收方收到的數據
①計算信息編碼多項式T(x)
M(X)=1101011011 G(x)=10011
生成多項式的最高次冪r=4,信息碼附加4個0後形成新的多項式。
M'(x):11010110110000
②用模2除法求M'(x)/G(x)的余數
③得出要傳輸的循環冗餘校驗碼多項式
將余數1110直接附加在M(x)的後面得T(x)=11010110111110
④接收端對接收到的T(x)進行校驗
設接收端接收到的數據為多項式T』(x),將T』(x)除以G(x),若余數為0,即T』(x)=T(x),則認為沒有錯誤。
T』(x)/G(x)=(Q(x)×G(x)+R(x)+R(x))/G(x)=(Q(x)×G(x))/G(x)=Q(x)
若余數不為0,即T』(x)≠T(x),認為有錯。
Ⅱ 計算機組成原理中,純小數的模為什麼是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運算
參考資料來源:網路-計算機組成原理
Ⅲ 用c語言實現模2演算法,eg:10010001110000000除10011,求余數。
#include<stdio.h>
#include<string.h>
void Bin2Dec(int *bin, int *Dec, int num)
{
int i, j = 1;
*Dec = 0;
for(i = num - 1; i > -1; i--)
{
*Dec += bin[i] * j;
j *= 2;
}
}
void Dec2Bin(int *Bin, int Dec, int *num)
{
int i = 0;
while(1)
{
Bin[i++] = Dec % 2;
Dec /= 2;
if(!Dec)
break;
}
*num = i;
}
void main()
{
char bin[100];
int i, j, Bin[100], dividend, divider, remainder;
printf("Input a binary as dividend:\n");
gets(bin);
j = 0;
for(i = 0; i < strlen(bin); i++)
Bin[j++] = bin[i] - 48;
Bin2Dec(Bin, & dividend, i);
printf("Input a binary as divider:\n");
gets(bin);
j = 0;
for(i = 0; i < strlen(bin); i++)
Bin[j++] = bin[i] - 48;
Bin2Dec(Bin, & divider, i);
remainder = dividend % divider;
Dec2Bin(Bin, remainder, &i);
printf("The remainder: ");
for(j = i - 1; j > -1; j--)
printf("%d", Bin[j]);
printf("\n");
}
Ⅳ 模2除法的運算過程是怎麼樣的
被除數÷除數(4位二進制),從被除數高位起,取4位,>除數,商記為1;<除數,記為0。
怎麼會4個O。因為上一位除數與被除數相等,相減差為3個0,本次除從被除數上拖1位下來,該位正好是0。
供參考
Ⅳ 二進制求余數(模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]='