ходу spec говорит:инструкции сдвига в Golang
<< left shift integer << unsigned integer
Что делать, если левая сторона тип uint8
:
var x uint8 = 128
fmt.Println(x << 8) // it got 0, why ?
fmt.Println(int(x)<<8) // it got 32768, sure
Вопросы:
- когда х uint8 типа, почему нет ошибки компиляции?
- почему
x << 8
получил результат0
Для C/C++,
unsigned int a = 128;
printf("%d",a << 8); // result is 32768.
Может кто-нибудь объяснить? Спасибо.
'uint8 (128) == 1000 0000' (двоичный). Вы сдвигаете это налево на 8 бит, это '1000 0000 0000 0000', из которых только последние 8 бит могут быть сохранены в' uint8', который равен '0000 0000', который равен 0. –
Вы спрашиваете, почему '0' результат' x << 8'. Позвольте мне спросить, какой результат вы ожидали при использовании значения типа, максимальное значение которого «255»? – icza