Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 得到LFSR的最大长度_C - Fatal编程技术网

C 得到LFSR的最大长度

C 得到LFSR的最大长度,c,C,我想帮助pls找出C代码的错误,我想测试线性反馈移位寄存器(LFSR)的最大长度,所以首先我获取原始寄存器的副本,然后我移动副本,然后测试其与原始寄存器的相等性,依此类推,直到获得最大长度 代码如下: #include<stdio.h> #include<stdlib.h> #include<malloc.h> void shiftLFSR (unsigned char* LFSR, unsigned char ntabs, unsigned char*

我想帮助pls找出C代码的错误,我想测试线性反馈移位寄存器(LFSR)的最大长度,所以首先我获取原始寄存器的副本,然后我移动副本,然后测试其与原始寄存器的相等性,依此类推,直到获得最大长度

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>


void shiftLFSR (unsigned char* LFSR, unsigned char ntabs, unsigned char* tabs, unsigned char  length);
void test_the_equality (unsigned char* LFSR, unsigned char* original_LFSR, unsigned char length, unsigned char count, unsigned char main_flag);

int main(){


    unsigned char length;
    unsigned char *LFSR;
    unsigned char *original_LFSR;
    unsigned char i;
    unsigned char ntabs;
    unsigned char *tabs;
    unsigned char count;
    unsigned char main_flag;
    count = 1;
    main_flag = 1;
    printf("enter the length of the LFSR\n");
    scanf("%d", &length);
    printf("enter the number of Tabs\n");
    scanf("%d", &ntabs);
    LFSR = (unsigned char *) malloc(length * sizeof(unsigned char));
    original_LFSR = (unsigned char *) malloc(length * sizeof(unsigned char));   
    tabs = (unsigned char *) malloc(ntabs * sizeof(unsigned char));



    for (i = 0; i < ntabs; i++){
    printf("enter the position of Tab[%d]\n",i);
    scanf("%d", &tabs[i]);
    }

    original_LFSR[0] = 0;
    printf("LFSR[0] = %d\n",original_LFSR[0]);

    for (i = 1; i < length; i++){
        original_LFSR[i] =  original_LFSR[i-1] ^ 1;
            printf("LFSR[%d] = %d\n",i, original_LFSR[i]);
    }
    for ( i = 0; i < length; i++)
            LFSR [i] = original_LFSR[i];

    while (main_flag == 1){     
    shiftLFSR (LFSR, ntabs, tabs, length);
    test_the_equality(LFSR, original_LFSR, length, &count, &main_flag);         
    }

    printf("the length of period = %d", count);
    free (LFSR);
    return 0;
}





void shiftLFSR (unsigned char LFSR[], unsigned char ntabs, unsigned char tabs[], unsigned char  length){
    unsigned char feedback_value;
    unsigned char *Temp_LFSR;
    unsigned char i;

    feedback_value = 0;
    Temp_LFSR = (unsigned char *) malloc(length * sizeof(unsigned char));
    for (i = 0; i < ntabs; i++)
            feedback_value ^= LFSR[tabs[i]];

    for (i = 0; i < (length - 1); i++)
        Temp_LFSR [i+1] = LFSR[i];

    Temp_LFSR[0] = feedback_value;

    for ( i = 0; i < length; i++)
        LFSR [i] = Temp_LFSR[i];
    free (Temp_LFSR);
} 



void test_the_equality (unsigned char LFSR[], unsigned char original_LFSR[], unsigned char length, unsigned char *count, unsigned char *main_flag){
    unsigned char i;
    i = 0;
    while (i < length){

        if (LFSR[i] == original_LFSR[i])

            i++;
        else{
            *count = *count +1;
            printf("the length of the first period = %d", *count);
            break;

        }

    }
    if (i >= length - 1)
        *main_flag = 0;

}
#包括
#包括
#包括
void shiftLFSR(无符号字符*LFSR、无符号字符NTAB、无符号字符*制表符、无符号字符长度);
void test__相等(无符号字符*LFSR,无符号字符*original_LFSR,无符号字符长度,无符号字符计数,无符号字符主标志);
int main(){
无符号字符长度;
无符号字符*LFSR;
无符号字符*原始字符;
无符号字符i;
无符号字符;
无符号字符*制表符;
无符号字符计数;
无符号字符主标志;
计数=1;
主标志=1;
printf(“输入LFSR的长度”);
扫描频率(“%d”和长度);
printf(“输入选项卡的数量\n”);
scanf(“%d”和NTAB);
LFSR=(无符号字符*)malloc(长度*sizeof(无符号字符));
原始_LFSR=(无符号字符*)malloc(长度*sizeof(无符号字符));
tabs=(无符号字符*)malloc(ntabs*sizeof(无符号字符));
对于(i=0;i=长度-1)
*主标志=0;
}

您得到了什么样的输出,它与您期望的有什么不同?如果LFSR的最高位上没有制表符,您就不能保证返回到原始LFSR,因此您可能会陷入无限循环。如果您使用的是
gcc
,则使用
-Wall
选项,由于存在一些键入错误+原型
test\u,因此等式
与其声明不匹配。但是在解决了所有问题之后,我认为您会发现
test>中的test
I>=length-1
等式应该是
I>=length
。您还应该考虑至少将<代码>计数>代码>转换为<代码> int >代码>,因为否则它将溢出在甚至小的LFSR上。如果您对产生最大长度的选项卡组合感兴趣,则查看原始多项式,特别是肖恩埃里克O'Calor的工作: