Toán tử dấu ngã (~) còn được gọi là toán tử NOT bitwise, thực hiện phần bổ sung của một số nhị phân bất kỳ dưới dạng đối số. Nếu toán hạng thành NOT là số thập phân thì nó chuyển nó thành số nhị phân và thực hiện phép toán bổ sung của một người.
Để tính toán phần bù của một người chỉ cần đảo ngược tất cả các chữ số [0 -> 1] và [1 -> 0] Ví dụ: 0101 = 5; ~ (0101) = 1010. Sử dụng toán tử dấu ngã: 1. Nó được sử dụng trong hoạt động tạo mặt nạ, Tạo mặt nạ có nghĩa là thiết lập và đặt lại các giá trị bên trong bất kỳ thanh ghi nào. cho người yêu cũ:
char mask ;
mask = 1 << 5 ;
Nó sẽ đặt mặt nạ thành giá trị nhị phân 10000 và mặt nạ này có thể được sử dụng để kiểm tra giá trị bit có bên trong biến khác.
int a = 4;
int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.
Đây được gọi là Mặt nạ các bit. 2.Để tìm số tương đương nhị phân của bất kỳ số nào bằng cách sử dụng thuộc tính che.
#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");
}
}
Đầu ra: Số thập phân 10 giống với 00001010
Quan sát của tôi : Đối với phạm vi tối đa của bất kỳ loại dữ liệu nào, phần bổ sung của một người cung cấp giá trị âm giảm 1 xuống bất kỳ giá trị tương ứng nào. ví dụ:
~ 1 --------> -2
~ 2 ---------> -3
, v.v. Tôi sẽ cho bạn thấy quan sát này bằng cách sử dụng đoạn mã nhỏ
#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
Lưu ý: Điều này chỉ hợp lệ cho phạm vi kiểu dữ liệu. có nghĩa là đối với kiểu dữ liệu int, quy tắc này sẽ chỉ áp dụng cho giá trị của dải ô [-2,147,483,648 đến 2,147,483,647].
Cảm ơn bạn ..... Điều này có thể giúp bạn