【发布时间】:2016-04-27 03:24:14
【问题描述】:
我有一个数组,其中包含一个 16 位值,每个位都在数组索引中。我想要做的是对特定数组元素执行“按位”异或,然后将所有元素移动 1(带换行)。
特别是,我想对数组元素 2、3 和 5 与最后一个元素 16 使用 XOR。
这个代码应该是循环的,一旦它完成了特定数量的循环(65535),它应该返回到原始输入值。
这是我的代码:
#include <iostream>
using namespace std;
void main()
{
//Initial array input
int state_array[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 };
int temp[1] = { 0 };
int array_size = sizeof(state_array) / (sizeof(temp[0]));
for (int i = 0; i<65535; i++)
{
temp[0] = state_array[15];
//XOR Values
for (int j = 0; j<16; j++) {
if ((j == 2 || j == 3 || j == 5) && state_array[15] == 1) {
state_array[j] = !state_array[j];
}
}
//Shift values
for (int j = array_size-1; j>0; j--)
{
if (j == 0) {
state_array[0] = temp[0];
}
else {
state_array[j] = state_array[j-1];
}
}
}
}
应该发生的是,在 65535 次迭代之后,数组返回值 0000000000000001,但这并没有发生,我不知道为什么。我觉得这是我在代码中忽略的一个小而明显的事情,但是我无法弄清楚。
【问题讨论】:
-
程序输出 0001011111110010。我在 XOR 和移位后打印结果,似乎移位中有问题,但我不是 100% 确定。