❶ 漢明碼三位校驗位最小距離為3的編碼如何判斷是錯了一位還是兩位啊謝謝
最常用的差錯控制方法有奇偶校驗法、循環冗餘校驗法和漢明碼等。這些方法用於識別數據是否發生傳輸錯誤,並且可以啟動校正措施,或者舍棄傳輸發生錯誤的數據,要求重新傳輸有錯誤的數據塊。1.奇偶校驗法奇偶校驗法是一種很簡單並且廣泛使用的校驗方法。這種方法是在每一位元組中加上一個奇偶校驗位,並被傳輸,即每個位元組發送九位數據。數據傳輸以前通常會確定是奇校驗還是偶校驗,以保證發送端和接收端採用相同的校驗方法進行數據校驗。如果校驗位不符,則認為傳輸出錯。奇校驗是在每個位元組後增加一個附加位,使得「1」的總數為奇數。奇校驗時,校驗位按如下規則設定:如果每位元組的數據位中「1」的個數為奇數,則校驗位為「0」若為偶數,則校驗位為「1」。奇校驗通常用於同步傳輸。而偶校驗是在每個位元組後增加一個附加位,使得「1」的總數為偶數。偶校驗時,校驗位按如下規則設定:如果每位元組的數據位中「1」的個數為奇數,則校驗位為「1」;若為偶數,則校驗位為「0」。偶校驗常用於非同步傳輸或低速傳輸。校驗的原理是:如果採用奇校驗,發送端發送的一個字元編碼(含校驗位)中,「1」的個數一定為奇數個,在接收端對接收字元二進制位中的「1」的個數進行統計,若統計出「1」的個數為偶數個,則意味著傳輸過程中有1位(或奇數位)發生差錯。事實上,在傳輸中偶然—位出錯的機會最多,故奇偶校驗法經常採用。然而,奇偶校驗法並不是一種安全的檢錯方法,其識別錯誤的能力較低。如果發生錯誤的位數為奇數,那麼錯誤可以被識別,而當發生錯誤的位數為偶數時,錯誤就無法被識別了,這是因為錯誤互相抵消了。數位的錯誤,以及大多數涉及偶數個位的錯誤都有可能檢測不出來。它的缺點在於:當某一數據分段中的一個或者多位被破壞時,並且在下一個數據分段中具有相反值的對應位也被破壞,那麼這些列的和將不變,因此接收方不可能檢測到錯誤。常用的奇偶校驗法為垂直奇偶校驗、水平奇偶校驗和水平垂直奇偶校驗。2.垂直奇偶校驗垂直奇偶校驗是在垂直方向上以列的形式附加上校驗位。數據格式及其發送順序:設垂直奇偶校驗的編碼效率為R,則:式中,m為碼字的定長位數,n為碼字的個數。垂直奇偶校驗又稱為縱向奇偶校驗,它能檢測出每列中發生的奇數個錯誤,偶數個錯誤,因而對差錯的漏檢率接近1/2。3.水平奇偶校驗水平奇偶校驗是在水平方向上以行的形式附加上校驗位。設水平奇偶校驗的編碼效率為R,則:式中,m為碼字的定長位數,n為碼字的個數。水平奇偶校驗又稱為橫向奇偶校驗,它不但能檢測出各段同一位上發生的奇數個錯誤,而且還能檢測出突發長度≤m的所有突發錯誤,其漏檢率要比垂直奇偶校驗法低,但是實現水平奇偶校驗時,一定要使用數據緩沖器。4.水平垂直奇偶校驗水平垂直奇偶校驗是在結合水平奇偶校驗和垂直奇偶校驗的基礎上形成的一種校驗方法。它是在一批字元傳送之後,另外增加一個稱為「方塊校驗字元」的檢驗字元,方塊校驗字元的編碼方式是使所傳輸字元代碼的每個縱向列中位代碼的「1」的個數成為奇數(或偶數)。式中,m為碼字的定長位數,n為碼字的個數。設水平垂直奇偶校驗的編碼效率為R,則:水平垂直奇偶校驗又稱為縱橫奇偶校驗。它能檢測出傳輸過程中發生的所有3位或3位以下的錯誤、奇數個錯誤、大部分偶數個錯誤以及突發長度≤m+1的突發錯誤,可使誤碼率降至原誤碼率的百分之一到萬分之一,有較強的檢錯能力,但是有部分偶數個錯誤不能檢測出來。水平垂直奇偶校驗還可以自動糾正差錯,使誤碼率降低2~4個數量級,適用於中、低速傳輸系統和反饋重傳系統,被廣泛用於通信和某些計算機外部設備中。5.循環冗餘校驗法循環冗餘校驗(CRC,CyclicRendancyCheck)法由分組線性碼的分支而來,主要應用於二元碼組。它是利用除法及余數的原理來作錯誤偵測(ErrorDetecting)的。這是一種比較精確、安全的檢錯方法,能夠以很大的可靠性識別傳輸錯誤,並且編碼簡單,誤判概率很低,但是這種方法不能夠校正錯誤。循環冗餘校驗法在通信系統中得到了廣泛的應用,特別適用於傳輸數據經過有線或無線介面時識別錯誤的場合。下面重點介紹循環冗餘校驗法。
❷ 如何判斷一個數的位數
x不用加引號
而且c語言里是不支持這種寫法的
10<=x<=99 幫你改了下 看看吧
#include
void main()
{
int x,a,b,c,d;
scanf("%d",&x);
if (10000<=x&&x<=99999)
{
printf("%d是五位數\n",x);
a=x;
}
if (1000<=x&&x<=9999)
{
printf("%d是四位數\n",x);
b=x;
}
if (100<=x&&x<=999)
{
printf("%d是三位數\n",x);
c=x;
}
if (10<=x&&x<=99)
{
printf("%d是二位數\n",x);
d=x;
}
else
{
printf("%d是一位數\n",x);
}
}
追問:
哦 加上&&之後可以了 謝謝啊 但是有個問題 我之前寫了一道題 也是范圍變數 但是我沒有用&& 照樣可以用啊 為什麼會這樣 就是這個
#include
void main()
{
float a,s;
scanf("%f",&a);
if (0<a<=10)
{
s=10*0.1;
}
if (10<a<=20)
{
s=1+(a-10)*0.075;
}
if (20<a<=40)
{
s=1+0.75+(a-20)*0.05;
}
if (40<a<=60)
{
s=1+0.75+1+(a-40)*0.03;
}
if (60<a<=100)
{
s=1+0.75+1+0.6+(a-60)*0.015;
}
if (100<a)
{
s=1+0.75+1+0.6+0.6+(a-100)*0.01;
}
printf("%f",s);
}
謝謝誒!
回答:
呵呵 不客氣 不過還有更簡單的方法
有興趣的話 我可以寫給你看看
補充:
這種方法更快速 代碼更簡潔
如果我的回答對你有所幫助
記得選個滿意答案哦
#include "stdio.h"
void main()
{
int num,i=0;
printf("輸入一個整數:");
scanf("%d",&num);
while (num)
{
num/=10;
++i;
}
printf("%d位數\n",i);
}
追問:
我知道有 我只是剛學的 所以寫的繁瑣點 但容易懂 你能不能跟我說一下 我補充的的那個 為什麼可以用的? 很奇怪呃 哦 還有 你改的這個程序 只有一位 兩位數只顯示XX是幾位 其餘的除了顯示幾位還有顯示一位 怎麼回事? 謝謝
回答:
邏輯判斷必須用&& ||來完成
可以用是因為他通過了語法分析
但是邏輯上是不正確的
能出現正確結果只是個巧合
另外你說我的程序的問題我不是很明白
能不能截圖發給我呢?
補充:
拿最簡單的比方來說吧
if(1<=x<=3)
他是先運算1<=x的值然後再和3比較
而這個式子要麼就是true也就是1要麼是false 0
怎麼都比3小
所以不管你怎麼寫 這個式子都很難不成立
當然不會報錯了
❸ C語言中怎樣判斷一個數是幾位數,看代碼謝謝!
這里你定義的n是int型,C語言中int型的范圍是-2147483648~2147483647。如果要判斷10位以上,至少應該將n定義為long型。
❹ 怎麼判斷海明碼的檢錯和糾錯位數求解釋
海明碼是糾錯碼。利用公式m+k+1 ≤ 2^k (m是信息位數,k是糾錯位數)
比如:8位的信息位,那麼k的最小值就應該為4,所以8為的信息碼需要4位的海明糾錯碼!
❺ java如何判斷數字的位數
按照num/10 語句,不是應該顯示 它是個99位數嗎?java是如何判斷為3位數的?
答999/10=99;此時num=99count=1;
99/10=9;此時num=9count=2;
9/10=0;此時num=0count=3;
一共在while循環里執行了三次,所以判斷是3位數
提示
System.out.println("它是個"+count+"位的數!");
這里輸出的是count這個變數,表達的是次數,
不是輸出num這個數,此時num經過循環已經等於0了
❻ 校驗碼誰能告訴我海明碼的規則,如何根據數據位算出校驗位
根據以下的方法來做吧(建議你好好學學《數據通信》)
海明碼是一種可以糾正一位差錯的編碼。它是利用在信息位為k位,增加r位冗餘位,構成一個n=k+r位的碼字,然後用r個監督關系式產生
的r個校正因子 來區分無錯和在碼字中的n個不同位置的一位錯。它必需滿足以下關系式:
2r>=n+1 或 2r>=k+r+1
海明碼的編碼效率為:
R=k/(k+r)
式中 k為信息位位數
r為增加冗餘位位數
❼ 檢錯碼和糾錯碼有什麼不同
檢錯碼:只檢錯不糾正
糾錯碼:發現錯誤並給以糾正
檢錯碼:一種編碼。指在傳輸過程中發生錯誤後,在接收端能自動檢查並發現錯誤的編碼。目前常用的檢錯碼有奇偶校驗碼、恆比碼等 檢錯碼的兩大類別:奇偶校驗編碼和循環冗餘編碼。
糾錯碼(error correcting code),在傳輸過程中發生錯誤後能在收端自行發現或糾正的碼。僅用來發現錯誤的碼一般常稱為檢錯碼。為使一種碼具有檢錯或糾錯能力,須對原碼字增加多餘的碼元,以擴大碼字之間的差別 ,即把原碼字按某種規則變成有一定剩餘度(見信源編碼)的碼字,並使每個碼字的碼之間有一定的關系。關系的建立稱為編碼。碼字到達收端後,可以根據編碼規則是否滿足以判定有無錯誤。當不能滿足時,按一定規則確定錯誤所在位置並予以糾正。糾錯並恢復原碼字的過程稱為解碼。檢錯碼與其他手段結合使用,可以糾錯。
❽ c語言 輸入任意一個整數,判斷其是幾位數
不會C語言。給出幾個演算法,代碼是fortran的,供參考。
第一種,用整數除法。對於整數a,連續用10除,直到商為零。除法的次數,即為位數。
這個演算法對於正負整數和零都能獲得正確的結果。
❾ 能檢測出2位錯誤,並能糾正1位錯誤的效驗碼是( )
奇偶校驗碼:通過1的個數判斷校驗位(1位)是0或1;
BCD碼:是一種編碼方式;
循環冗餘碼:能發現多位出錯,並對多位糾錯;
海明碼:通過多位冗餘碼,可發現多位出錯,但只能糾正一位
所以答案為:海明碼
❿ 怎麼判斷一個數是區位碼
按照區位碼的定義,所有的國標漢字及符號分配在一個94行、94列的方陣中,方陣的每一行稱為一個「區」,編號為01區到94區;每一列稱為一個「位」,編號為01位到94位,方陣中的每一個漢字和符號所在的區號和位號組合在一起形成的四個阿拉伯數字就是它們的「區位碼」。
在區位碼中,01-09區為特殊字元,10-55區為一級漢字(3755個最常用的漢字,按拼音字母的次序排列),56-87區為二級漢字(3008個漢字,按部首次序排列),88區到94區為自定義漢字區。
上面的四個數中,9843這個數是超出區碼定義范圍的。