Левая операция Bitshift. Является ли этот расчет правильным? - PullRequest
0 голосов
/ 08 ноября 2019

Каков результат следующей операции сдвига битов:

  ((((uint32)   0x0) << 6U) |  
   (((uint32)   0x2) << 4U) |  
   (((uint32)   0x0) << 2U) |  
   (((uint32)   0x1) << 0U))   

Я ожидал бы:

0 | 32 | 0 | 1 = 33 десятичных числа

Этоправильно или я совершенно не прав?

1 Ответ

2 голосов
/ 08 ноября 2019

Вы можете запустить код и убедиться в этом сами. Позвольте мне написать для вас заявление printf.

#include <stdio.h>
#include <stdint.h>

int main (void)
{
  printf("%u\n",   
    (((uint32_t)   0x0) << 6U) |  
    (((uint32_t)   0x2) << 4U) |  
    (((uint32_t)   0x0) << 2U) |  
    (((uint32_t)   0x1) << 0U) );
}
...