为什么在Java中〜1返回-2而不是0?

时间:2018-10-15 02:04:04

标签: java bit-manipulation bit negate

我正在尝试将给定int的所有位取反(也称为取反)。

让我们说给定数字(给定数字为5)的二进制表示形式为101,否定(我的输出)应为010。

我对每个从最低有效位到最高有效位的位使用〜来求反。

function onRequest(req, res) {    
  // … other code …

  if (someCondition) {
    functionOfTheOriginalPost(req, res);
    return;
    // ^-- This is the return that I forgot so it 
    // was jumping down in the "404" area
  }

  res.writeHead(404);
  res.end();
}

http.createServer(onRequest).listen(3000);

我的输出结果是 -2-1-2

那是为什么?我在做什么错了?

1 个答案:

答案 0 :(得分:1)

因为您要反转

的每个数字
int msb = Character.getNumericValue(givenNumInBinary.charAt(i));
output.append(~msb);

而不是反转每个

替代解决方案是

output.append(msb == 0 ? 1 : 0);
....
System.out.println(output.toString());

输出

010