Vấn đề đây là một phép toán đảo bit, nên là số âm hay số dương thì việc đảo bit đều được thực hiện giống nhau. Điểm đặc biệt là đối với số âm thì MSB (most significant bit) sẽ bằng 1. Thế nên ta sẽ đảo lại cho bằng 0.
#include <stdio.h>
int main() {
int x = -3;
char nhi_phan [33] = {0};
itoa (x,nhi_phan,2);
printf ("decial: %d\n",x);
printf ("binary: %s\n",nhi_phan);
x = ~x;
printf ("decial: %d\n",x);
itoa (x,nhi_phan,2);
printf ("binary: %s\n",nhi_phan);
return 0;
}
Trong ví dụ này ta đảo -3, kết quả in ra màn hình sẽ như sau
decial: -3
binary: 11111111111111111111111111111101
decial: 2
binary: 10
@ndg2394 thử giải thích tại sao kết quả lại như vậy xem?