予想外の場所に「1」がでてきてしまいます。
卒論でハミング符号による誤り検出のシミュレーションをすることになり
まず、7桁の符号割り当てをしたいのですが、以下のコードを実行したところ
ある行から配列の冗長ビット分に確保しておいた場所に1が入り込んできて
悩んでいます。
C
1#include <stdio.h> 2 3#define tate 16 4#define yoko 6 5int hamming1511[tate][yoko]={0}; 6 7void add(int i, int j){ 8 hamming1511[i][j]=(hamming1511[i][j]+1)%2; 9 10 if(hamming1511[i][j]==0){ 11 add(i,j-1);//もし桁上りがあるなら上の桁を見る 12 13 } 14 15 16} 17 18int main(void){ 19 int i,j; 20 21 for(i=1;i<tate;i++){ 22 23 for(j=3;j>=0;j--){ 24 hamming1511[i][j]=hamming1511[i-1][j]; 25 } 26 /*2進数で+1=MSBから再帰的に見ていく*/ 27 add(i,3); 28 29 30 } 31 32 /*閲覧*/ 33 for(i=0;i<tate;i++){ 34 printf("%d :",i+1); 35 for(j=0;j<=yoko;j++){ 36 printf("%d ",hamming1511[i][j]); 37 38 } 39 printf("\n"); 40 } 41 42 return 0; 43}
実行結果は以下です。
1 :0 0 0 0 0 0 0 2 :0 0 0 1 0 0 0 3 :0 0 1 0 0 0 0 4 :0 0 1 1 0 0 0 5 :0 1 0 0 0 0 0 6 :0 1 0 1 0 0 0 7 :0 1 1 0 0 0 0 8 :0 1 1 1 0 0 1 9 :1 0 0 0 0 0 1 10 :1 0 0 1 0 0 1 11 :1 0 1 0 0 0 1 12 :1 0 1 1 0 0 1 13 :1 1 0 0 0 0 1 14 :1 1 0 1 0 0 1 15 :1 1 1 0 0 0 1 16 :1 1 1 1 0 0 0
右から三桁は冗長ビットとして後から手を加える予定なので、いずれの行も000としておきたいのですが、8~15行までなぜか001が出てしまいます。
どうしたらMSBに1がでなくなるか教えていただけると助かります。お願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。