波浪号运算符 (~) 也 称为按位非运算符,执行任何二进制数的反码 作为参数。如果 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的负值到任何对应的值。
例如:
~1 --------> -2
~2---------> -3
等等...我将使用小代码 sn-p 向您展示这个观察结果
#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] 的值。
谢谢.....希望对您有所帮助