int main()
{
unsigned int a = 1;
printf("%u\n",a<<(-1));
return 0;
}
Вывод 2147483648.
Вот мое предположение и подтверждение: (просто предположение!)
1. Правый операнд "<<" должен иметь тип unsigned int, </strong>
Итак, во-первых, (int) «-1» будет приведено к (unsigned int) «-1». Потому что тип int является представлением с двумя дополнениями, результат будет 2 ^ 32-1 (без знака int)
2.В связи с тем, что число 2 ^ 32-1 больше, чем цифра максимального смещения, 2 ^ 32 - 1 будет мод 32, что равно 27
Я также пытался некоторые другие числовые номера правых операндов, и результаты ручного вычисления с предполагаемыми правилами будут такими же, как и у моего продукта в IDE.
Я пытаюсь найти некоторые подтверждающие официальные документы, ведьма может проверить, правильно ли мое предположение или нет. Может быть, вы можете сказать мне.