java

时间:2018-03-20 11:00:08

标签: java

    char td[] = {'1','0','0','1','1','1'};
    char s_td[] = new char[td.length];

    for(int i=0; i<td.length; i++)
    {
        if(i==0)
            s_td[i] = (char) (td[td.length-1] ^ td[i]);
        else
            s_td[i] = (char)(s_td[i-1] ^ td[i]);
    }
for(int i=0 ; i<s_td.length ; i++)
        System.out.print(s_td[i]);

对于给定的代码段,我需要s_td[] = {0,0,0,1,0,1},即简单的XOR操作。 相反,我得到{ ,0, ,1, ,1}。正如你所看到的,它对于偶数位置正常工作,但在奇数位置给出了空白。我尝试将其强制转换为 int ,在使用 Character.getNumericValue(s_td [i])给出{0,48,0,49,0,49}时使用{-1,0,-1,1,-1,1}。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

XOR 按预期工作。因为你将它应用于在java中被提升为int(该字符的ASCII值)的字符。

1 ^ 1 = 0 [ Thats how XOR works]

此外,应该注意它们是按位运算符并且仅在二进制等价物上执行。建议你也浏览一下真值表。

现在,在您的情况下,完成操作后将值转换回int中的字符的问题。这就是你输出变化的原因

答案 1 :(得分:0)

根据评论中的描述,我认为不是

s_td[i] = (char)(s_td[i-1] ^ td[i]);

你的意思

s_td[i] = (char)(td[i-1] ^ td[i]);

但是,我原来的评论仍然适用。你有点文本数据类型。没关系:结果是整数。但是,您将它转换回text数据类型。对于您的数据,至少会产生不可打印的字符。