4 байта int Переполнение значения - PullRequest
0 голосов
/ 25 марта 2020

Я и мой друг сделали на разных компьютерах следующее: enter image description here

Но результат обоих компьютеров получился одинаковым. Разве память не должна давать адрес случайного места при переполнении переменной?

1 Ответ

1 голос
/ 25 марта 2020

Обычное поведение процессоров - для целочисленных команд умножения возвращать младшие биты математического произведения. Например, при умножении 32-битного числа на 32-битное число полный математический продукт может быть выражен в 64 битах (с некоторыми корректировками в зависимости от того, являются ли операнды типом со знаком или без знака), но процессор установит низкий 32 бита этого продукта в регистре назначения.

В показанном вами продукте 2 • 4 • 6 •… • 22 • 24 младшие 32 бита математического продукта - это cfc00000 (выражается в шестнадцатеричном формате). Когда эти биты интерпретируются как число дополнения до двух, значение равно -809500672, так как установлен старший бит (используется для знака).

Таким образом, это обычный результат переполнения в продукте, который вы оценили. Это поведение не определено стандартом C, и вместо него могут быть получены другие результаты.

...