元素切换位置编译?

时间:2016-12-27 08:43:20

标签: c++ arrays element bits

我一直在遇到这个非常奇怪的错误,我的数组的元素将与另一个交换位置。我可以通过在编译之前手动更改元素来解决问题,但为了便于访问,我希望保持原样。我的目标是比较位并将结果存储在数组中。在我调用该函数后,我没有主动调用的函数,因此它不会更改数组本身。当我将数组声明为常量时,它完全相同。

这是我的阵列:

int myconsts[8][8] = {
    { 6, 10, 0, 9, 14, 6, 6, 7 }
};

我的问题是,数字14(myconsts[4])和7(myconsts[7])将随机交换位置。这是我如何比较函数中的位

std::array<std::array<int, 4>, 8> myfunct(int arr[][8]) {
    std::array<std::array<int, 4>, 8> arr2;
    int i = 0;
    do {
        std::bitset<4> num1(arr[0][i]);
        std::bitset<4> num2(arr[1][i]);
        std::bitset<4> num3(arr[2][i]);

        int no;
        int no2;
        int no3;

        for (int x = 0; x < 4; x++) {
            int sum = 0;
            std::cout << num1[x] << "   Num: " << num1[0] << num1[1] << num1[2] << num1[3] << std::endl;

        }
        std::cout << " " << std::endl;
        i++;
    } while (i < 8);
    //just testing the logic
    arr2 = { 0 };
    return arr2;
}

输出:

[0]

0   Num: 0110
1   Num : 0110
1   Num : 0110
0   Num : 0110

[1]

0   Num : 0101
1   Num : 0101
0   Num : 0101
1   Num : 0101

[2]

0   Num : 0000
0   Num : 0000
0   Num : 0000
0   Num : 0000

[3]

1   Num : 1001
0   Num : 1001
0   Num : 1001
1   Num : 1001

这里是与原始元素交换位置的地方[7]! [4]

0   Num : 0111
1   Num : 0111
1   Num : 0111
1   Num : 0111

[5]

0   Num : 0110
1   Num : 0110
1   Num : 0110
0   Num : 0110

[6]

0   Num : 0110
1   Num : 0110
1   Num : 0110
0   Num : 0110

[7]

1   Num : 1110
1   Num : 1110
1   Num : 1110
0   Num : 1110

它的元素[0..7],其间的每个空格代表一个新元素。我不确定它是否在所有编译器上都是一样的。

1 个答案:

答案 0 :(得分:0)

我看不到你在描述什么。

以下是我的输出注释:

0   Num : 0111  // This is 2 + 4 + 8 = 14
1   Num : 0111
1   Num : 0111
1   Num : 0111

0   Num : 0110 // This is 2 + 4 = 6
1   Num : 0110
1   Num : 0110
0   Num : 0110

0   Num : 0110 // This is 2 + 4 = 6
1   Num : 0110
1   Num : 0110
0   Num : 0110


1   Num : 1110 // This is 1 + 2 + 4 = 7
1   Num : 1110
1   Num : 1110
0   Num : 1110

看起来你只是倾销:..., 14, 6, 6, 7 };
这是你阵列的最后4个元素。

我说一切看起来都是正确的。

也许你正在屏幕上向后阅读你的位,因为LSB(最低有效位) 通常 放在最右边,并且你已经把它放在最左边

但是你的代码工作正常。