我不确定XORing应该如何在Java中的字符之间“正确”地完成。我见过其他人这么做,但当我有这么简单的事情时:
char a = 'a';
char b = 'b';
char c = (char) a ^ b;我得到一个“从int到char的可能的有损转换”编译错误。我不知道国家信息系统是如何被纳入这一背景的。
发布于 2019-02-23 20:00:53
当您在^上使用char时,操作是以char的int值完成的。
由于运算符优先,铸造在^之前。
这意味着它将编译为
((char) a) ^ b由于强制转换是第一位的,所以升级到int是最后一个,您将尝试将一个int分配给一个char。
您要使用括号:
char c = (char) (a ^ b);发布于 2019-02-23 19:59:23
插入符号(xor)运算符在int值上工作。char变量和b被隐式提升为int类型,从而使之成为可能。这部分的工作没有失去精确性。
但是,您的代码强制int值返回char类型。您可以简单地使用int类型的c来修正这个问题,或者通过正确使用括号来解决这个问题。
发布于 2019-02-23 20:43:10
我不知道国家信息系统是如何被纳入这一背景的。
在您的示例中,两个字符的XOR可能与char类型的范围重叠,因此编译器为该语句生成一个int。
在这里,情况并非如此,因为97^98是3,但是就像a和b变量不是final一样,这些变量可以稍后更改,因此编译器不接受将结果分配给char。
使用常量值或内联它们,您就不需要任何强制转换:
final char a = 'a';
final char b = 'b';
char c = a ^ b;否则,只有当您确信这样做不会产生任何副作用时,XOR操作的结果才会缩小到char:
char c = (char) (a ^ b);https://stackoverflow.com/questions/54845597
复制相似问题