Почему число вдруг обнуляется в цикле при увеличении?
Сделал цикл, в котором просто число возводится в степень.
int n = 10;
int a = 2;
while (n > 0)
{
a *= a;
Console.WriteLine(a);
n--;
}
Цикл проходит 4 итерации, а после умножения 65536 на 65536, переменная обнуляется. Проверял c long. Там цикл проходил ещё одну итерации, а потом снова шли нули. Однако делал эксперимент
long a = long.MaxValue;
Console.WriteLine(a * a * a * a * a * a);
и в нём происходит ожидаемое переполнение типа без обнуления. Почему в цикле переменная обнуляется?
Ответы (1 шт):
Все зависит от того, какое значение попадет в переменную после переполнения типа int. В вашем случае,
65 536 * 65 536 = 4 294 967 296
что в битовом представлении будет равно:
00000001 00000000 00000000 00000000 00000000
Переменная типа int представлена 4 байтами, поэтому если отбросить пятый байт, то выходит, что в переменную будет записано значение, в котором все биты равны 0, отсюда и значение в десятичной форме равно 0.