【问题标题】:the operator ^ is undefined for argument type(s) int,boolean运算符 ^ 未定义参数类型 int,boolean
【发布时间】:2016-07-11 17:59:20
【问题描述】:

我正在解决 Hackerrank 问题“最大化异或”。 (https://www.hackerrank.com/challenges/maximizing-xor)

我使用'if'语句来检查 i xor j 是否大于'max',如代码所示。

static int maxXor(int l, int r) {
    int max=0;
    for(int i=l;i<r;i++)
        for(int j=l;j<r;j++)
        {
            if(i^j>max)/*error part*/
            max=i^j;
        }
    return max;
}

但是为什么会出现这个错误?

对于参数类型 int,boolean',运算符 ^ 未定义

【问题讨论】:

  • 虽然其他人已经回答了您的问题,但请注意,虽然此解决方案会通过,但它并不是最有效的解决方案。如果您尝试在位级别上考虑 XOR 的作用,则可以使其运行得更快。

标签: java operator-precedence boolean-operations


【解决方案1】:

您需要在表达式周围加上括号:

if ( (i ^ j) > max )

根据Java's operator precedence table,XOR 运算符^ 的优先级低于不等运算符&gt;

因此,您对i ^ j &gt; max 的原始书面表达将被解释为i ^ (j &gt; max)。但在这里,类型不正确:iint,但 (j &gt; max)boolean。这就是你得到那个编译器错误的原因。


附带说明,如果您在 C/C++ 中编译此代码,它会编译,但运行时会出现奇怪的结果。这是因为在 C/C++ 中,同样的运算符优先级规则适用于这种情况,但 bool 将转换为 0 或 1 的 int,然后进行异或。这将是危险和错误的。 Java 编译器阻止您对 intboolean 进行异或运算,这将是一个荒谬的操作。

【讨论】:

【解决方案2】:

看看 Java 运算符优先级:http://bmanolov.free.fr/javaoperators.php。如您所见,整数比较()的优先级高于异或。所以你的陈述在java中被解释为

if ( i ^ (j>max))

所以你必须手动在语句中添加括号

if ( (i^j) > max)

为了达到你想要的比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多