异或和移位数组中的位
XOR and Shifting bits in array
我有一个数组,它包含一个 16 位值,数组索引中的每一位。我想要做的是执行特定数组元素的 "bit-wise" XOR,然后将所有元素移动 1(带包装)。
特别是,我想对数组元素 2、3 和 5 与最后一个元素 16 进行异或运算。
这段代码应该是循环的,一旦它完成了特定数量的循环 (65535),它应该 return 到原始输入值。
这是我的代码:
#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 次迭代之后,数组 returns 回到值 0000000000000001,但这并没有发生,我也不知道为什么。我觉得这是我在代码中忽略的一个小而明显的东西,但我无法弄清楚。
在 shift 部分,你永远不会遇到 j == 0
条件,因为你的 for 循环条件是 j > 0
问题是您没有正确编制索引。而不是像这样进行 XORing 的语句:
if ((j == 2 || j == 3 || j == 5) && state_array[15] == 1) {
state_array[j] = !state_array[j];
}
它需要从 0 开始索引,而不是 1,并且应该如下所示:
if ((j == 1 || j == 2 || j == 4) && state_array[15] == 1) {
state_array[j] = !state_array[j];
}
具有讽刺意味的是,您的 state_array[15]
是正确的,只是 2
、3
和 5
需要修复。
此外,您的 for
循环应该具有条件 j>=0
而不仅仅是 j>0
.
我有一个数组,它包含一个 16 位值,数组索引中的每一位。我想要做的是执行特定数组元素的 "bit-wise" XOR,然后将所有元素移动 1(带包装)。
特别是,我想对数组元素 2、3 和 5 与最后一个元素 16 进行异或运算。
这段代码应该是循环的,一旦它完成了特定数量的循环 (65535),它应该 return 到原始输入值。
这是我的代码:
#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 次迭代之后,数组 returns 回到值 0000000000000001,但这并没有发生,我也不知道为什么。我觉得这是我在代码中忽略的一个小而明显的东西,但我无法弄清楚。
在 shift 部分,你永远不会遇到 j == 0
条件,因为你的 for 循环条件是 j > 0
问题是您没有正确编制索引。而不是像这样进行 XORing 的语句:
if ((j == 2 || j == 3 || j == 5) && state_array[15] == 1) {
state_array[j] = !state_array[j];
}
它需要从 0 开始索引,而不是 1,并且应该如下所示:
if ((j == 1 || j == 2 || j == 4) && state_array[15] == 1) {
state_array[j] = !state_array[j];
}
具有讽刺意味的是,您的 state_array[15]
是正确的,只是 2
、3
和 5
需要修复。
此外,您的 for
循环应该具有条件 j>=0
而不仅仅是 j>0
.