【发布时间】:2019-03-19 09:57:46
【问题描述】:
我试图否定(a.k.a invert)给定 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
这是为什么呢?我做错了什么?
【问题讨论】:
-
@TimBiegeleisen 完成。
-
如果重复链接仍然让您感到疑惑,请尝试康奈尔计算机科学部门的reading this good tutorial。基本上,您只需要弄清楚 2 的恭维是如何工作的。
-
@TimBiegeleisen 我阅读了答案和文章。我还是不明白。我的问题很简单。二进制补码中的
5是101。否定每一位应该是010。为什么我收到-2-1-2?? -
因为您要逐个否定每个数字。也许下面的@wombat 答案是您打算做的,但实际上并没有做。
-
@TimBiegeleisen 那么,类似于 ^、& 和 | 的二进制否定表是什么? ?这是&,|的表格和^imgur.com/a/V4w5JdG
标签: java bit-manipulation bit negate