2016-12-27 69 views
-1

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

这里是我的数组:

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],两者之间的每个空间都代表着一个新元素我不确定在所有编译器上它是否一样。

+2

解决此类问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –

+0

@πάνταῥεῖ谢谢! – Countchocula

+0

@πάνταῥεῖ我不确定搜索到什么才能得到直接的答案。 – Countchocula

回答

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(最低显著位)为通常提上极右,你已经把它放在最左边

但是你的代码工作正常。

+1

哦,我的上帝,我是个白痴。我正在向后看。我不是软件工程师,我对这个问题还不熟悉。 – Countchocula

+1

这让我感觉很蠢。谢谢! – Countchocula

+0

你的***自我让你觉得自己很愚蠢。你不是软件工程师,但你认为你发现了一个编译器错误?你写信给一个由软件工程师填补的董事会,*“如果你不了解4位二进制,这可能是一个难题”*。 (不,这不是我们任何人的斗争)。 – abelenky