使用 xor 运算符时 Java 编译错误

标签 java bit-manipulation precision

我正在尝试用 Java 编写一个字符串反转函数(我知道我可以简单地调用现有函数,但我正在尝试这样做来练习和学习)

public class HelloWorld{

    public static void main(String []args){
        String s = reverse("abcd");
        System.out.println(s);

    }
    public static String reverse(String str){
        int end = str.length() - 1;
        int start = 0;

        char[] arr = str.toCharArray();
        while (start < end)
        {
            arr[start] =  arr[start] ^ arr[end];

            arr[end] = arr[start] ^ arr[end];

            arr[start] = arr[start] ^ arr[end];

            start++;
            end--;
        }
        String ret = new String(arr);
        return ret; 
    }
}

但是,它给了我这些错误:

HelloWorld.java:16: error: possible loss of precision
            arr[start] =  arr[start] ^ arr[end];
                                     ^
  required: char
  found:    int
HelloWorld.java:18: error: possible loss of precision
            arr[end] = arr[start] ^ arr[end];
                                  ^
  required: char
  found:    int
HelloWorld.java:20: error: possible loss of precision
            arr[start] = arr[start] ^ arr[end];
                                    ^
  required: char
  found:    int
3 errors

我尝试过像这样的类型转换

arr[end] = (char) arr[start] ^ arr[end];

没有解决问题。 这是怎么回事?

最佳答案

    I have tried casting like
    arr[end] = (char) arr[start] ^ arr[end];

您只转换第一个char,而不转换另一个,从而为您提供 char 的整数/小数值 中的xor 结果不是 char 值 本身。

示例:

相反,您可以将其括在括号中并将操作结果转换为 char。

(char) (arr[start] ^ arr[end]);

关于使用 xor 运算符时 Java 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196565/

相关文章:

PHP翻转32位整数

python - Pandas Dataframe 浮点精度

matlab - 如何在 MATLAB 数据游标中以更高精度显示数字?

java - 关闭可运行的 JOptionPane

java - 登录对话框窗口不会完全处理

java - 检查 Java 中 64 位 BigInteger 是否包含所有非零高 32 位?

c - 通过位操作将数据存储在变量中

c - C 中的整数除法将值向下舍入/结果为零

java - RxJava 而不是 AsyncTask?

java - 以编程方式编译 Xtend 类不起作用