операторы = и! = в то же время - PullRequest
0 голосов
/ 07 апреля 2019

Недавно я увидел код, который печатает число в двоичной системе.
Я не понимаю строку: bit = (dec & 0x8000) != 0;
Кто-нибудь может мне это объяснить?

int dec,n ;
short bit;


    printf("Insert number: ");
    scanf("%d", &dec);

    if (dec == 9999)  printf(" Out of range!"); 


    for (int i = 1; i <= 16; i++) {
        bit = (dec & 0x8000) != 0;
        printf("%d", bit);
        if (i % 4 == 0) printf(" ");
        dec <<= 1;
    }
    printf("\n");



return 0;

}

Ответы [ 6 ]

3 голосов
/ 07 апреля 2019

Присвойте переменной bit значение 1, если результат оценки (dec & 0x8000) не равен 0;и значение 0 в противном случае.

2 голосов
/ 07 апреля 2019

значение (dec & 0x8000) != 0 сначала оценивается как истинное или ложное (1 или 0), а затем bit присваивается значение.

1 голос
/ 07 апреля 2019

Эта строка берет номер, который вы вставили из консоли, и применяет логическое И.Например, если вы введете 1024 (0100 0000 0000 двоичный), то у вас будет 0100 0000 0000 & 1000 0000 0000 0000 (что составляет 0x8000, каждое число заменяется двоичной тетрадой).В этом случае результат равен 0, а не! = 0, а затем значение переменного бита равно 0.

0 голосов
/ 09 апреля 2019

Строка

bit = (dec & 0x8000) != 0 ;

эквивалентна:

if ( (dec & 0x8000) != 0 ) bit = 1;
else                       bit = 0;

, но это однострочная для оператора if-else

& - это побитовый оператор и , который сравнивает двоичную запись из dec и 0x8000 и возвращает 1 , где есть оба в dec и 0x8000

маленький пример: 11&5 возвращает 1, потому что 11 = 0b1011 и 5 = 0b101 и сравнивая (справа налево) мы имеем только последние 1 в обоих числах ...

0x8000 является шестнадцатеричным для 32768

надеюсь, это поможет

0 голосов
/ 07 апреля 2019

Проверяет, установлен ли единственный бит в константе 0x8000 в dec или нет.& - это битовый оператор и .

Результат (dec & 0x8000) != 0 (равный 0 или 1) присваивается bit.

Лично япредпочитаю bit = !!(dec & 0x8000).

0 голосов
/ 07 апреля 2019

Оператор & является побитовым и. Он используется для маскировки всех битов из dec, кроме бита 0x8000. Оператор != является оператором сравнения. Он проверяет, что два значения неравны. Если они неравны, результат равен 1. В противном случае результат равен 0. Поэтому, если бит 0x8000 из dec не равен нулю, т. Е. 1, тогда bit будет равно 1. В противном случае это будет 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...