带有嵌套 if 的 for 循环被破坏,并将所有 1 而不是数据传输到数组

for loop with nested if is broken, and transfers all 1's instead of data to an array

经过几个小时的测试,我已经将问题缩小到单个 for 循环,而不是带有嵌套的 for 循环(第 64 行),如果将数据从 converMain[] 传输到 converMain1[] 所有数据都是设置为 1,我已经完成,其他一切正常,就是这个 for 循环。

int converMain[14];
converMain1[0] = 1;
int g = 1;
for (int i = 1; i < 19; i++) {
if (i == 1 || 2 || 4 || 8) { //tests if we are on a parody bit
converMain1[i] = p[i]; //puts parody bit in Main1 array
        g++; //this variable helps sync the bits in the               
                         //right spot in the Main1 array 
    }
    else {
    converMain1[i] = converMain[i - g];         
//puts binary stored in Main array into Main1 array with correct sync
    }
}

输出:

0001011 h 1010011 e 1001111101111111101 0010 392953 104 101 00010111010011
parody bits          ^^ ^   ^
0011011 l 0011011 l 1001111101111111101 0010 392953 108 108 00110110011011
parody bits          ^^ ^   ^
1111011 o 1110111 w 1101011101111111101 1000 392939 111 119 11110111110111
parody bits          ^^ ^   ^
1111011 o 0100111 r 1111011101111111101 1100 392943 111 114 11110110100111
parody bits          ^^ ^   ^
0011011 l 0010011 d 1111111111111111101 1111 393215 108 100 00110110010011
parody bits          ^^ ^   ^
1000010 ! 1000010 ! 1011011101111111101 0100 392941 33 33 10000101000010
parody bits          ^^ ^   ^ 

我们应该期望最右边的数字串成 中间的数字和箭头忽略了箭头的位置,因为这些是模仿位和 只是在放下阵列的其余部分之前移动它们。

if (i == 1 || 2 || 4 || 8) 总是 正确。

if ((i == 1) || (2) || (4) || (8)) 是编译器读取它的方式,因此它至少在 2 处停止,因为它是真的。

一个自然的解决方案是 if (i == 1 || i == 2 || i == 4 || i == 8) ...