Какой размер int в 32-битной системе
Что проверяют
Базу про типы данных и то, понимаете ли вы, что ответ зависит от языка, а не только от разрядности. Для тестировщика важнее другое: знаете ли вы граничные значения и где на них ловятся дефекты. Следом обычно просят назвать границы и придумать тест на переполнение.
Как отвечать
Короткий ответ: в 32-битной системе int почти везде занимает 4 байта, то есть 32 бита. Знаковый диапазон от -2147483648 до 2147483647, беззнаковый от 0 до 4294967295. Дальше покажите, что знаете оговорки:
- C и C++: стандарт гарантирует для
intлишь минимум в 16 бит. На 64-битных Linux и macOS (модель LP64)intостаётся 32-битным, растутlongи указатели; на 64-битной Windows (LLP64) 32-битными остаются иint, иlong; - Java и C#:
intвсегда 32 бита на любой платформе, для 64 бит естьlong; - Go:
intзависит от платформы, 32 бита на386иarm, 64 бита наamd64иarm64. Фиксированный размер даютint32иint64; - Python:
intбез ограничения размера, переполнения нет; - JavaScript: числа хранятся как
numberдвойной точности, целые точны только доNumber.MAX_SAFE_INTEGER, дальше нуженBigInt.
Для тестирования это прямой источник проверок: значения на границе и за ней в полях с идентификаторами, счётчиками, суммами в копейках. Пример: 25 миллионов рублей в копейках уже не влезают в 32-битное знаковое поле. Отдельные классы ошибок: большие ID в JSON, которые JavaScript на фронте молча округляет, и 32-битное Unix-время, которое переполнится 19 января 2038 года.
Где спотыкаются
Говорят, что на 64-битной системе int становится 8 байт. Для C, C++ и Java это неверно, так ведёт себя только int в Go.
Отвечают одной цифрой и не связывают её с тестированием. Интервьюеру на позицию QA интересен не размер сам по себе, а тест-кейсы, которые вы из него выведете.
Считают, что переполнение всегда заканчивается ошибкой. В Java и Go значение молча заворачивается в отрицательное, в C для знаковых целых это неопределённое поведение, поэтому баг проявляется странными данными, а не падением.