为什么 ~1 returns -2 而不是 Java 中的 0?
Why ~1 returns -2 rather than 0 in Java?
我正在尝试取反(a.k.a 反转)给定 int 的所有位。
假设给定数字(给定数字是 5)的二进制表示是 101,它的否定(我的输出)应该是 010。
我对从最低有效位到最高有效位的每一位都使用 ~ 来取反。
public static void main (String[] args) throws java.lang.Exception
{
// your code go
int num = 5;
String givenNumInBinary = Integer.toBinaryString(num);
StringBuffer output = new StringBuffer();
for(int i = 0; i <= givenNumInBinary.length()-1;i++){
int msb = Character.getNumericValue(givenNumInBinary.charAt(i));
output.append(~msb);
}
System.out.println(output.toString());
}
我的输出结果是
-2-1-2
这是为什么?我做错了什么?
因为你在
处反转每个 数字
int msb = Character.getNumericValue(givenNumInBinary.charAt(i));
output.append(~msb);
而不是反转每个位。
替代解决方案是
output.append(msb == 0 ? 1 : 0);
....
System.out.println(output.toString());
输出
010
我正在尝试取反(a.k.a 反转)给定 int 的所有位。
假设给定数字(给定数字是 5)的二进制表示是 101,它的否定(我的输出)应该是 010。
我对从最低有效位到最高有效位的每一位都使用 ~ 来取反。
public static void main (String[] args) throws java.lang.Exception
{
// your code go
int num = 5;
String givenNumInBinary = Integer.toBinaryString(num);
StringBuffer output = new StringBuffer();
for(int i = 0; i <= givenNumInBinary.length()-1;i++){
int msb = Character.getNumericValue(givenNumInBinary.charAt(i));
output.append(~msb);
}
System.out.println(output.toString());
}
我的输出结果是 -2-1-2
这是为什么?我做错了什么?
因为你在
处反转每个 数字int msb = Character.getNumericValue(givenNumInBinary.charAt(i));
output.append(~msb);
而不是反转每个位。
替代解决方案是
output.append(msb == 0 ? 1 : 0);
....
System.out.println(output.toString());
输出
010