Answers:
该~
操作是按位NOT,它反转位二进制数:
NOT 011100
= 100011
~
也称为“一个人的补码”,它是二进制求反的一种形式。几乎所有现代计算机都使用二进制补码算术,即按位逆算加一。因此,对于有符号整数变量x
,通常会发现它~x + 1
提供与相同的值-x
。例如,在我的机器上printf("%hx %hx\n", -1234, ~1234 + 1)
打印fb2e fb2e
。
它是按位NOT运算符。它将所有位反转为整数值。
Tilde运算符(〜)也称为按位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到任何对应的值。例如:
〜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数据类型,意味着此规则仅适用于range [-2,147,483,648到2,147,483,647]的值。
谢谢.....可以帮助您