Это не имеет ничего общего с количеством «мест» в базе 10 или, если вы предпочитаете, длиной числа, когда вы его записываете (опять же, в базе 10).Самая основная причина ограничения состоит в том, что компьютеры хранят числа (и все остальное) в виде битов и байтов, что означает, что они работают в базе 2.
int
в c - это 4-байтовый (32-разрядный) тип данных.Он может хранить числа в диапазоне от -2 147 483 648 (-2 31 ) до 2 147 483 647 (2 31 - 1), если подпись int
или от 0 до 4 294 967 295 (2 )32 -1), если это не так.
В любом случае, 1234567891 находится в диапазоне, который вписывается в 4 байта, но 9999999999 и 12345678912 - нет.
Примечание:Я признаю, что спецификация допускает, чтобы int
составлял 2 байта, но описанное OP поведение возможно, только если OP использует реализацию, в которой int
равен 4 байта.