波形符运算符(〜)也称为按位NOT运算符,执行一个人的任何二进制数作为参数的补充。如果NOT的操作数是十进制数,那么它将它转换为二进制并执行其补码操作。要计算补数,只需将所有数字[0 - > 1]和[1 - > 0]反相,即 例如:0101 = 5; 〜(0101)= 1010. 使用波形符号运算符: 1.它用于掩码操作,掩码表示设置和重置任何寄存器内的值。例如:
char mask ;
mask = 1 << 5 ;
它会将掩码设置为10000的二进制值,并且此掩码可用于检查其他变量中存在的位值。
int a = 4;
int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.
这就是所谓的位的屏蔽。 2.使用遮罩属性查找任意数字的二进制等效项。
#include<stdio.h>
void equi_bits(unsigned char);
int main()
{
unsigned char num = 10 ;
printf("\nDecimal %d is same as binary ", num);
equi_bits(num);
return 0;
}
void equi_bits(unsigned char n)
{
int i ;
unsigned char j , k ,mask ;
for(i = 7 ; i >= 0 ; i--)
{
j=i;
mask = 1 << j;
k = n&mask ; // Masking
k==0?printf("0"):printf("1");
}
}
输出:十进制10是相同00001010
我观察:对于任何数据类型的最大范围内,一的补码提供减少1到任何相应的值的负值。 ex:
〜1 --------> -2
〜2 ---------> -3
等等......我会告诉你使用小代码片段
#include<stdio.h>
int main()
{
int a , b;
a=10;
b=~a; // b-----> -11
printf("%d\n",a+~b+1);// equivalent to a-b
return 0;
}
Output: 0
注意:这仅适用于数据类型的范围。用于int数据类型的方法此规则仅适用于范围[-2,147,483,648至2,147,483,647]的值。
Thankyou .....这可以帮助你
这将用于什么目的?我听说你可以在无符号 - >签名转换中使用它,但我不知道如何? – MarcusJ
Bitwise NOT对于许多事情很有用,例如位掩码。我不确定你的意思是无符号的有符号整数转换。 – GWW
等一下,你不应该和位掩码?这就是我的读者正在做的事情,但它很敏感。 我读过,如果你有X而不是它,那么减去一个,你会得到一个有符号数的未签名版本,是不是正确的? – MarcusJ