Я знаю о int
и long
(32-битные и 64-битные числа), но что такое uint
и ulong
?
В чем разница между «int» и «uint» / «long» и «ulong»?
Ответы (5)
Примитивные типы данных с префиксом "u" являются беззнаковыми версиями с теми же битовыми размерами. Фактически это означает, что они не могут хранить отрицательные числа, но, с другой стороны, они могут хранить положительные числа в два раза больше, чем их аналоги со знаком. Подписанные копии не имеют префикса «u».
Ограничения для int (32 бита):
int: –2147483648 to 2147483647
uint: 0 to 4294967295
И для длинного (64 бит):
long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
uint
и ulong
— это беззнаковые версии int
и long
. Это означает, что они не могут быть отрицательными. Вместо этого они имеют большее максимальное значение.
Type Min Max CLS-compliant int -2,147,483,648 2,147,483,647 Yes uint 0 4,294,967,295 No long –9,223,372,036,854,775,808 9,223,372,036,854,775,807 Yes ulong 0 18,446,744,073,709,551,615 No
Чтобы написать буквальное целое число без знака в исходном коде, вы можете использовать суффикс u
или U
, например 123U
.
Вы не должны использовать uint и ulong в общедоступном интерфейсе, если хотите быть совместим с CLS.
Прочтите документацию для получения дополнительной информации:
Кстати, есть еще short и ushort и byte и sbyte а>.
Разница в том, что uint
и ulong
являются беззнаковыми типами данных, что означает, что диапазон отличается: они не принимают отрицательные значения:
int range: -2,147,483,648 to 2,147,483,647
uint range: 0 to 4,294,967,295
long range: –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong range: 0 to 18,446,744,073,709,551,615
u
означает unsigned
, поэтому ulong
— это большое число без знака. Вы можете хранить большее значение в ulong
, чем long
, но отрицательные числа не допускаются.
Значение long
хранится в 64-битном формате, и его первая цифра показывает, является ли это положительным или отрицательным числом. в то время как ulong
также является 64-битным, со всеми 64-битными для хранения числа. таким образом, максимум ulong равен 2(64)-1, а long равен 2(63)-1.
Прошло некоторое время с тех пор, как я С++, но эти ответы немного не те.
Что касается размера, «int» ничего не значит. Это условное значение стандартного целого числа; считается быстрым для таких вещей, как итерация. У него нет предустановленного размера.
Таким образом, ответы верны в отношении различий между int и uint, но неверны, когда они говорят о том, насколько они велики или каков их диапазон. Этот размер не определен, или, точнее, он будет меняться в зависимости от компилятора и платформы.
Никогда не вежливо обсуждать размер своих бит на публике.
Когда вы компилируете программу, int действительно имеет размер, так как вы взяли абстрактный C/C++ и превратили его в конкретный машинный код.
Итак, СЕГОДНЯ, практически говоря с наиболее распространенными компиляторами, они верны. Но не предполагайте этого.
Конкретно: если вы пишете 32-битную программу, int будет одним, 64-битным — другим, а 16-битным — другим. Я просмотрел все три и мельком взглянул на 6502 содрогаюсь
Краткий поиск в Google показывает следующее: https://www.tutorialspoint.com/cprogramming/c_data_types.htm Это также полезная информация: https://docs.oracle.com/cd/E19620-01/805-3024/lp64-1/index.html
используйте int, если вам действительно все равно, насколько велики ваши биты; это может измениться.
Используйте size_t и ssize_t, если вы хотите узнать, насколько велико что-то.
Если вы читаете или записываете двоичные данные, не используйте int. Используйте ключевое слово (обычно зависящее от платформы/источника). В WinSDK есть множество хороших, удобных в сопровождении примеров. Другие платформы тоже.
Я провел МНОГО времени, просматривая код людей, которые SMH думали, что все это просто академично/педантично. Они съели людей, которые пишут неподдерживаемый код. Конечно, легко использовать тип «int» и использовать его без лишнего набора текста. Это большая работа, чтобы понять, что они на самом деле имели в виду, и немного ошеломляющая.
Это дерьмовое кодирование, когда вы смешиваете int.
используйте int и uint, когда вам просто нужно быстрое целое число и вам не нужен диапазон (кроме подписанных/беззнаковых).