Используемый флаг имеет только установленный MSB и все остальные биты сброшены, так что когда вы наберете bitwise and
с номером, вы можете проверить MSB в числе.
Есть два результата побитового Anding:
- Ноль - означает, что число имеет 0 в
MSB.
- Non-Zero - означает, что число имеет 1 в
его MSB.
Теперь нам нужен способ отображения
Non-zero -> 1
Zero -> 0
поэтому мы используем двойное отрицание.
То же самое можно было бы сделать, используя:
for(i=0;i<sizeof(int)*8;i++) {
(n & flag) ? printf("1"):printf("0");
n = n << 1;
}