0

这是我用 C++ 编写的一个函数(有效),现在正尝试转换为 Java:

static String parseAInstruction(String line) {
    int n = getValue(line);
    if (n>=0) {
        String inst = "0";
        for (int i=14; i>=0; --i) {
            if (Math.pow(2, i) & n)
                inst += "1";
            else
                inst += "0";
        }
        return inst;
    } else {
        return "error";
    }
}

这在 C++ 中编译得很好,但是在尝试在 Java 中编译时,出现以下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Type mismatch: cannot convert from int to boolean

    at parser.Parser.parseAInstruction(Parser.java:38)
    at parser.Parser.main(Parser.java:50)

在Java中按位AND查找,似乎应该是一样的。它根本不应该与布尔值有关。谁能告诉我这个问题?

4

5 回答 5

4

在 Java 中,您只能在if子句中使用布尔值。if因此,两个数字的按位与结果在语句中无效。

试试这个:if ((Math.pow(2, i) & n) != 0) {

[编辑]但是,正如评论者@jlordo 指出的那样,接下来您必须解决在双精度和整数之间进行按位与的问题。

于 2013-02-05T00:23:15.113 回答
3

问题是您不能只在条件表达式中使用整数 for if。你需要类似的东西:

        if (((int)Math.pow(2, i) & n) != 0)
于 2013-02-05T00:25:56.277 回答
2

你的问题在这里:

if (Math.pow(2, i) & n)

在 Java 中,您需要有一个boolean值作为条件。你可能想要:

if (((int)(Math.pow(2, i)) & n) != 0)

强制转换int是必要的,因为Math.pow()将返回 adouble并且&运算符仅针对两个int操作数定义。

于 2013-02-05T00:24:01.820 回答
1

尝试在 Java 中对两个整数进行按位与运算,但编译器尝试将它们用作布尔值

不,它没有。按位与的结果是类型int。Java 要求if语句中的表达式为布尔类型,而您的不是。您需要将表达式转换为布尔值。

于 2013-02-05T00:24:17.857 回答
1

Math.pow在 Java 中是用对数和指数计算的(与 C++ 不同,编译器经常优化对 的调用pow),两者都是非常缓慢的近似浮点运算。

在这里使用甚至没有意义 - 你正在使用位,所以使用位:

(n & (1 << i)) != 0就是你要找的。

于 2013-02-05T08:39:02.347 回答