per*_*ery 0 java precision bit-manipulation
我试图在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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它给了我这些错误:
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
Run Code Online (Sandbox Code Playgroud)
我试过像铸造一样
arr[end] = (char) arr[start] ^ arr[end];
Run Code Online (Sandbox Code Playgroud)
没有解决问题.这里发生了什么?
I have tried casting like
arr[end] = (char) arr[start] ^ arr[end];
Run Code Online (Sandbox Code Playgroud)
你只铸造了第一个char,但不是另一个从而给你的结果,xor在integer/decimal value焦炭的不是char value自己.
样品:
相反,你可以将它包装在括号中,并将操作的结果转换为char.
(char) (arr[start] ^ arr[end]);
Run Code Online (Sandbox Code Playgroud)