что значит ? 1: 0 означает

Я не понимаю, чего пытается достичь третья линия. Я совсем недавно выучил побитовые операторы. Было бы здорово, если бы кто-нибудь мог провести меня через последние две строчки. Я понимаю оператор сдвига, но я не совсем понимаю, что он означает.

    void create(uint8_t bInt[], int64_t num){
      for (int pos = 0; pos < 32; pos++){ 
        bInt[pos] = (num & mask) ? 1 : 0;
        mask = mask << 1;
         }
       }

Для этого назначения мы используем 32-элементный массив значений uint8_t для представления 32-битных целых чисел. Например, целое число 84193 в двоичном формате равно 0 .... 0001 0100 1000 1110 0001. В bInt [] оно будет сохранено как 1000 0111 0001 0010 1000 0000 .... 0. Спасибо за уделенное время


person ponderingdev    schedule 23.03.2015    source источник
comment
Это называется условным оператором: en.wikipedia.org/wiki/%3F:   -  person P.P    schedule 24.03.2015
comment
Тернарный оператор: if (это условие) return 1 else return 0;   -  person Jared Burrows    schedule 24.03.2015
comment
Вы можете заменить (num & mask) ? 1 : 0 на (num & mask) != 0 или !!(num & mask)   -  person chqrlie    schedule 24.03.2015


Ответы (2)


?: - это тернарный оператор. (num & mask) ? 1 : 0;

Подумайте об этом так:

if( (num & mask) ) {
    bInt[pos] = 1
} else {
    bInt[pos] = 0
}
person Ryan    schedule 23.03.2015

Это тернарный оператор, который также используется в некоторых других языках, таких как - java, c ++. Это замена краткой формы if-then-else. Это работает, как показано ниже -

expression ? if_true_then_process_it : or_process_it  
person Razib    schedule 23.03.2015
comment
Хм .. Избегайте повторения ответов на вопрос, которые уже были даны в прошлом. Хотя правильно, самостоятельно, предоставил точный ответ за 5 минут до вашего ответа. Иногда это неизбежно (например, два человека отвечают одновременно), но по возможности этого следует избегать. - person David C. Rankin; 24.03.2015