C 程序永远不会陷入 for 循环

问题描述 投票:0回答:1

我编写了一个简单的程序来执行伽罗瓦有限域乘法,但不知何故该程序陷入了循环。

#include<stdio.h>

int GaloisMult(int a, int b){
    int i,j=0,h=0,k,abits[8],bbits[8];
    for (i = 0; i < 8; i++){
        if(((a >> i) & 1) == 1) abits[j++] = i;
        if(((b >> i) & 1) == 1) bbits[h++] = i;
    }

    for (i = 0; i < j; i++) printf("%d ",abits[i]);
    printf("\n");
    for (i = 0; i < h; i++) printf("%d ",bbits[i]);

    int dbits[11] = {0};

//here
    for (k = 0; k < h; k++) {
        for (i = 0; i < j; i++){
            int index = abits[i] + bbits[k];
            dbits[index] = (dbits[index] + 1) % 2;
        }
    }

    int val = 0;
    for (i = 10; i >= 0; i--) val = (val << 1) | dbits[i];
    while(val > 0xff) val ^= 0x11b;
    return val;
}

int main(){
    int a = 0xac;
    int b = 0x0e;
    printf("\n%02X * %02X = %02X",a,b,GaloisMult(a,b));
}

程序永远不会结束,不知何故陷入了二维 for 循环。

c for-loop galois-field
1个回答
0
投票

程序卡住的循环并不是在for循环中,而是在while循环中

while(val > 0xff) val ^= 0x11b;

在这一行中,您正在执行异或运算。 XOR运算具有自反转属性,所以每次做

val ^ 0x11b = result
,就意味着在下一次迭代中,
result ^ 0x11b = val
,所以会无穷无尽。

检查这一行,重新评估您的停止条件,并分析您想要在代码中执行的操作。

希望有帮助!

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.