首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符间的Java有损XOR

字符间的Java有损XOR
EN

Stack Overflow用户
提问于 2019-02-23 19:54:06
回答 3查看 209关注 0票数 4

我不确定XORing应该如何在Java中的字符之间“正确”地完成。我见过其他人这么做,但当我有这么简单的事情时:

代码语言:javascript
复制
char a = 'a';
char b = 'b';
char c = (char) a ^ b;

我得到一个“从int到char的可能的有损转换”编译错误。我不知道国家信息系统是如何被纳入这一背景的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-23 20:00:53

当您在^上使用char时,操作是以char的int值完成的。

由于运算符优先,铸造在^之前。

这意味着它将编译为

代码语言:javascript
复制
((char) a) ^ b

由于强制转换是第一位的,所以升级到int是最后一个,您将尝试将一个int分配给一个char

您要使用括号:

代码语言:javascript
复制
char c = (char) (a ^ b);
票数 5
EN

Stack Overflow用户

发布于 2019-02-23 19:59:23

插入符号(xor)运算符在int值上工作。char变量和b被隐式提升为int类型,从而使之成为可能。这部分的工作没有失去精确性。

但是,您的代码强制int值返回char类型。您可以简单地使用int类型的c来修正这个问题,或者通过正确使用括号来解决这个问题。

票数 2
EN

Stack Overflow用户

发布于 2019-02-23 20:43:10

我不知道国家信息系统是如何被纳入这一背景的。

在您的示例中,两个字符的XOR可能与char类型的范围重叠,因此编译器为该语句生成一个int。

在这里,情况并非如此,因为97^983,但是就像ab变量不是final一样,这些变量可以稍后更改,因此编译器不接受将结果分配给char

使用常量值或内联它们,您就不需要任何强制转换:

代码语言:javascript
复制
final char a = 'a';
final char b = 'b';
char c =  a ^ b;

否则,只有当您确信这样做不会产生任何副作用时,XOR操作的结果才会缩小到char:

代码语言:javascript
复制
char c =  (char) (a ^ b);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54845597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档