Я столкнулся с этим кодом для двоичного представления числа. Я хочу знать потребность в использовании!! в коде.
int main() {
int n,i;
unsigned flag = 1<<(sizeof(int) * 8 - 1);
printf("Input the number\n");
scanf("%d",&n);
for(i=0;i<sizeof(int)*8;i++) {
printf("%d",!!(n & flag) );
n = n << 1;
}
return 0;
}
Используемый флаг имеет только старший бит, а все остальные биты очищены, так что когда вы побитовое и
] это с номером, вы можете проверить MSB в номере.
Есть два результата поразрядного anding:
Теперь нам нужен способ отображения
Non-zero -> 1
Zero -> 0
, поэтому мы используем двойное отрицание.
То же самое можно было бы сделать, используя:
for(i=0;i<sizeof(int)*8;i++) {
(n & flag) ? printf("1"):printf("0");
n = n << 1;
}
!!
преобразует любое ненулевое значение в 1 и оставит нулевое значение равным нулю.
x = 0;
y = 50;
!x; // 1
!y; // 0
!!x; // 0
!!y; // 1
Это булевский слепок для бедняков.