位补运算符(~波浪号)
先决条件:
C/C++ 中的位运算符
Java中的位运算符
按位补码运算符是一元运算运算符(仅适用于一个操作数)。它取一个数字并反转它的所有位。然后,当对位应用按位运算运算符时,所有的 1 都变为 0,反之亦然。按位补码的运算符是~(波浪号)。
例子:
Input: ~ 0000 0011
Output: 1111 1100
Input: 1110 0111
Output: 0001 1000
应谨慎使用按位补码运算符。如果结果存储在无符号变量中,则 ~运算符对小数的结果可能是大数。如果结果存储在有符号变量中,则结果可能是负数(假设负数以 2 的补码形式存储,其中最左边的位是符号位)。
Input:
n = 2
Binary form of 2 = 0010
Bitwise complement operation on 2 = ~ 0010
= 1101
1101 is equivalent to decimal value 13.
Expected output: 13
Correct Output : -3
The compiler returns the 2’s complement of the input value.
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
输出:
Bitwise complement of 2 : -3
解释:
2 (~2) 的按位补码是 -3 而不是 13,但为什么呢?
当以 10 为基数打印数字时,NOT 运算的结果可能令人惊讶。特别是,正数可以变成负数,反之亦然。
让我们首先找到 2 的按位补码的二进制表示,即 -3
The negative numbers are stored as the two’s complement of the positive counterpart.
2的补码:
二进制补码是对二进制数的运算。一个数的 2 的补码等于该数的补码加 1。
例子:
Bitwise complement Operation of 2 (~ 0010 ): 1101
Calculate 2’s complement of 3:
Binary form of 3 = 0011
1’s Complement of 3 = 1100
Adding 1 to 1’s complement = 1100 +1
2’s complement of 3 = 1101
Note:
The bitwise Complement of 2 is same as the binary representation of -3
因此,从上面的例子可以得出结论——
- 对于任何整数 n,n 的按位补码将为 -(n+1)。
- N = ~N 的按位补码(以 2 的补码形式表示)。
- 2'补码~N= -(~(~N)+1) = -(N+1)。