Двоичное представление числа в C

Я столкнулся с этим кодом для двоичного представления числа. Я хочу знать потребность в использовании!! в коде.

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;
}
6
задан codaddict 7 April 2010 в 13:54
поделиться

3 ответа

Используемый флаг имеет только старший бит, а все остальные биты очищены, так что когда вы побитовое и ] это с номером, вы можете проверить MSB в номере.

Есть два результата поразрядного anding:

  • Ноль - означает, что число имеет 0 в его MSB.
  • Ненулевое значение - означает, что число имеет 1 в старшем разряде.

Теперь нам нужен способ отображения

Non-zero -> 1
Zero -> 0

, поэтому мы используем двойное отрицание.

То же самое можно было бы сделать, используя:

for(i=0;i<sizeof(int)*8;i++) {

    (n & flag) ? printf("1"):printf("0");
    n = n << 1;
}
7
ответ дан 8 December 2019 в 12:20
поделиться

!! преобразует любое ненулевое значение в 1 и оставит нулевое значение равным нулю.

x = 0;
y = 50;
!x; // 1
!y; // 0
!!x; // 0
!!y; // 1

Это булевский слепок для бедняков.

10
ответ дан 8 December 2019 в 12:20
поделиться

Я бы написал !! x менее запутанно, как x! = 0 .

2
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: