波形符運算符(〜)也稱爲按位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