ตัวดำเนินการ Tilde (~) เรียกอีกอย่างว่าตัวดำเนินการ bitwise NOT ทำหน้าที่เติมเต็มเลขฐานสองใด ๆ เป็นอาร์กิวเมนต์ หากตัวถูกดำเนินการถึงไม่เป็นเลขฐานสิบจะแปลงเป็นเลขฐานสองและดำเนินการส่วนเสริม
ในการคำนวณส่วนเติมเต็มเพียงแค่คว่ำตัวเลขทั้งหมด [0 -> 1] และ [1 -> 0] เช่น: 0101 = 5; ~ (0101) = 1010 การใช้ตัวดำเนินการทิลเดอร์: 1. ใช้ในการมาสก์การมาสก์หมายถึงการตั้งค่าและการรีเซ็ตค่าภายในรีจิสเตอร์ใด ๆ สำหรับอดีต:
char mask ;
mask = 1 << 5 ;
มันจะตั้งค่ามาสก์เป็นค่าไบนารี 10,000 และสามารถใช้มาสก์นี้เพื่อตรวจสอบค่าบิตที่มีอยู่ภายในตัวแปรอื่น
int a = 4;
int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.
สิ่งนี้เรียกว่าMasking of bits 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 ;
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;
printf("%d\n",a+~b+1);
return 0;
}
Output: 0
หมายเหตุ: ใช้ได้เฉพาะกับช่วงประเภทข้อมูลเท่านั้น หมายถึงประเภทข้อมูล int กฎนี้จะใช้ได้เฉพาะกับค่าของช่วง [-2,147,483,648 ถึง 2,147,483,647]
ขอบคุณ ..... ขอให้สิ่งนี้ช่วยคุณได้