📜  位补运算符(~波浪号)

📅  最后修改于: 2022-05-13 01:55:03.184000             🧑  作者: Mango

位补运算符(~波浪号)

先决条件:
C/C++ 中的位运算符
Java中的位运算符

按位补码运算符是一元运算运算符(仅适用于一个操作数)。它取一个数字并反转它的所有位。然后,当对位应用按位运算运算符时,所有的 1 都变为 0,反之亦然。按位补码的运算符是~(波浪号)。

例子:

应谨慎使用按位补码运算符。如果结果存储在无符号变量中,则 ~运算符对小数的结果可能是大数。如果结果存储在有符号变量中,则结果可能是负数(假设负数以 2 的补码形式存储,其中最左边的位是符号位)。

C
// C program to implement
// the above approach
#include 
 
// Driver code
int main()
{
  int n = 2;
  printf("Bitwise complement of %d : %d",
          n, ~n);
  return 0;
}


C++
// C++ program to implement
// the above approach
#include 
using namespace std;
 
// Driver code
int main()
{
  int a = 2;
  cout << "Bitwise complement of " <<
           a << " : " << ~a;
}


Java
// Java program to implement
// the above approach
import java.io.*;
 
// Driver code
class GFG
{
    public static void main (String[] args)
    {
        int a = 2;
        System.out.println("Bitwise complement of " +
                            a + " : " + ~a);
    }
}


Python3
# Python3 program to implement
# the above approach
 
# Driver code
n = 2
print("Bitwise complement of {n} :",
       ~n)


C#
// C# program to implement 
// the above approach
using System;
 
class GFG{
 
static public void Main()
{
    int a = 2;
     
    Console.WriteLine("Bitwise complement of " + a +
                      " : " + ~a);
}
}


Javascript


输出:

解释:
2 (~2) 的按位补码是 -3 而不是 13,但为什么呢?
当以 10 为基数打印数字时,NOT 运算的结果可能令人惊讶。特别是,正数可以变成负数,反之亦然。

让我们首先找到 2 的按位补码的二进制表示,即 -3

2的补码:
二进制补码是对二进制数的运算。一个数的 2 的补码等于该数的补码加 1。

例子:

因此,从上面的例子可以得出结论——

  1. 对于任何整数 n,n 的按位补码将为 -(n+1)。
  2. N = ~N 的按位补码(以 2 的补码形式表示)。
  3. 2'补码~N= -(~(~N)+1) = -(N+1)。