XOR和数组中的位移位

时间:2016-04-26 19:08:30

标签: c++ arrays xor

我有一个数组,它在数组索引中保存一个16位值。我想要做的是执行特定数组元素的“按位”异或,然后将所有元素移动1(包装)。

特别是,我想在数组元素2,3和5上使用XOR和最后一个元素16。

这段代码应该是循环的,这样一旦它完成了特定的循环次数(65535),就应该返回原始输入值。

这是我的代码:

@foreach (service_provider SP in ViewBag.service_provider) {
    <tr>
        <td>@SP.Sp_email</td>
        <td>@SP.Sp_name</td>
        <td>@SP.city.Cityname</td>
    </tr>}@foreach (picture img in ViewBag.pictures){
    <tr> 
        <td><img src="data:image/png;base64,@Convert.ToBase64String(img.pic,0,img.pic.Length)" width="100" />
        </td>
    </tr>
}

应该发生的是,在65535次迭代之后,数组返回值0000000000000001,但这不会发生,我无法弄清楚原因。我觉得这是我在代码中忽略的一个小而明显的事情,但我无法理解。

2 个答案:

答案 0 :(得分:1)

在转换部分,您永远不会达到j == 0条件,因为您的for循环条件为j > 0

答案 1 :(得分:1)

问题是您没有正确编制索引。而不是你的声明使XORing看起来像这样:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

void main()
{
    vector<string> Names;
    string Name;

    Names.reserve(20); // optional

    cout << "    Enter your names to be sorted\n";
    cout << "To exit just press [Enter] at any time\n";

    do
    {
        cout << Names.size() << endl;
        cout << "\n< Name " << (Names.size() + 1) << " > = ";

        if ((!getline(cin, Name)) || Name.empty())
            break;

        Names.push_back(Name);
    }
    while (true);

    cout << "\nFinal Name Amount = " << Names.size() << endl << endl;
}

它需要为0索引,而不是1,并且应该如下所示:

if ((j == 2 || j == 3 || j == 5) && state_array[15] == 1) {
    state_array[j] = !state_array[j];
}

具有讽刺意味的是,您的if ((j == 1 || j == 2 || j == 4) && state_array[15] == 1) { state_array[j] = !state_array[j]; } 是正确的,只有state_array[15]23需要修复。

此外,您的5循环的条件for不仅仅是j>=0