Я знаю про int
и long
(32-битные и 64-битные числа), но что такое uint
и ulong
?
Я знаю про int
и long
(32-битные и 64-битные числа), но что такое uint
и ulong
?
Ответы:
Примитивные типы данных с префиксом «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
. Это означает, что они не могут быть отрицательными. Вместо этого они имеют большее максимальное значение.
Тип Мин. Макс. CLS int -2 147 483 648 2 147 483 647 Да uint 0 4,294,967,295 Нет длинные –9,223,372,036,854,775,808 9,223,372,036,854,775,807 Да ulong 0 18,446,744,073,709,551,615 Нет
Чтобы написать буквальное целое число без знака в исходном коде, вы можете использовать суффикс u
или, U
например 123U
.
Вам не следует использовать uint и ulong в общедоступном интерфейсе, если вы хотите быть CLS-совместимым .
Прочтите документацию для получения дополнительной информации:
u
означает unsigned
, что ulong
это большое число без знака. Вы можете хранить большее значение в ulong
чем long
, но никаких отрицательных чисел не допускается.
long
Значение сохраняется в 64-битном, с первой цифрой , чтобы показать , если это положительное / отрицательное число. в то время ulong
как тоже 64-битный, со всеми 64-битными для хранения числа. поэтому максимальное значение ulong равно 2 (64) -1, а long - 2 (63) -1.
Разница в том, что 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
Прошло некоторое время с тех пор, как я C ++, но эти ответы немного ошибочны.
Что касается размера, 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, когда вам просто нужно быстрое целое число и не заботитесь о диапазоне (кроме подписанного / беззнакового).