最速怪談選手権

C言語勉強中です。
行列計算で
int i,j,e
unsigned short a[4][4]= {
    {0x00,0x04, 0x08, 0x12},
    {0x01 0x05, 0x09, 0x13},
    {0x02, 0x06, 0x10, 0x14},
    {0x03, 0x07, 0x11, 0x15}
};
  unsigned short gyouretu[4][4]= {
    {0x01, 0x02, 0x03, 0x01},
    {0x03, 0x03, 0x02, 0x01},
    {0x02, 0x02, 0x03, 0x01},
    {0x01, 0x01, 0x02, 0x03}
  };
unsigned short b[4][4][4];

  for(i= 0; i < 4; i++){
    for(j= 0; j < 4; j++){
      for(e= 0; e < 4; e++){
          b[i][j][k] = (gyouretu[j][e] & 0x01) * a[e][i]
            ^ (gyouretu[j][e] & 0x02) * a[e][i]
            ^ (gyouretu[j][e] & 0x04) * a[e][i]
            ^ (gyouretu[j][e] & 0x08) * a[e][i];
}
}
}
この処理がどのような処理しているか教えてください。
行列の中身を1から3を判定してaの配列とかけていると思うのですが
入れ子でi,j,k に分けてgyouretu[j][e] の配列と a[e][i]が
b[i][j][e]にどのように入るのか、なぜ[j][e]  [e][i]なのかわかりません。

質問者からの補足コメント

  • 解決しました

      補足日時:2021/01/19 11:15

A 回答 (3件)

k って変数が宣言されていないからエラーになるような気がするの.

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
b[i][j][k]はb[i][j][e]の打ち間違いです。すいません。

お礼日時:2021/01/17 00:10

信号計算か暗号計算のような気もしますが、aが規則正しすぎること、gyouretuに対してbitごとの掛け算してる点から、単に演習問題以上の意味がないコードのような気もします。



どこからこのコードを見つけてきたのか、補足したほうが回答を得られやすいかも。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
a及びgyouretu値については変更しています。
for文の入れ子と配列の入り方のみ知りたかったので。
mixcolumnsの行列計算です。

お礼日時:2021/01/16 14:40

すいません。

完全に分かりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!