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}
。
提前谢谢!
答案 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数据类型。对于您的数据,至少会产生不可打印的字符。