В C # встроенные целые числа представлены последовательностью битовых значений предварительно определенной длины.Для базового типа данных int
эта длина составляет 32 бита.Поскольку 32 бита могут представлять только 4 294 967 296 различных возможных значений (так как это 2 ^ 32), очевидно, что ваш код не будет бесконечно зацикливаться с постоянно увеличивающимися значениями.
Поскольку int
может содержать как положительные, так и отрицательные числа,знак числа должен быть как-то закодирован.Это сделано с первого бита.Если первый бит равен 1, то число является отрицательным.
Вот значения int, расположенные в числовой строке в шестнадцатеричном и десятичном виде:
Hexadecimal Decimal
----------- -----------
0x80000000 -2147483648
0x80000001 -2147483647
0x80000002 -2147483646
... ...
0xFFFFFFFE -2
0xFFFFFFFF -1
0x00000000 0
0x00000001 1
0x00000002 2
... ...
0x7FFFFFFE 2147483646
0x7FFFFFFF 2147483647
Как видно изНа этой диаграмме биты, представляющие наименьшее возможное значение, - это то, что вы получили бы, добавив единицу к максимально возможному значению, игнорируя при этом интерпретацию знакового бита.Когда таким образом добавляется число со знаком, оно называется «переполнением целого».Разрешается ли целочисленное переполнение или рассматривается как ошибка, можно настроить с помощью операторов checked
и unchecked
в C #.По умолчанию этот флажок снят, поэтому ошибок не возникло, но вы получили это сумасшедшее маленькое число в вашей программе.
Это представление называется 2 Complement .