Я пытаюсь понять операторы сдвига в C/C++, но они доставляют мне неприятности.
У меня есть 8-битное целое число без знака, инициализированное значением, например, скажем, 1.
uint8_t x = 1;
Насколько я понимаю, в памяти он представлен как |0|0|0|0|0||0||0||1|
. Теперь, когда я пытаюсь изменить переменную x на 16 бит, я надеюсь получить результат 0. Но, к моему удивлению, я получаю 65536
. Я определенно упускаю что-то, чего я не могу получить.
Вот мой код:
#include <iostream>
int main() {
uint8_t x = 1;
std::cout<<(x<<16)<<"\n";
return 0;
}
Это наивный вопрос, но он меня очень беспокоит.