Я знаю про int
и long
(32-битные и 64-битные числа), но что такое uint
и ulong
?
118
Примитивные типы данных с префиксом «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
. Это означает, что они не могут быть отрицательными. Вместо этого они имеют большее максимальное значение.Чтобы написать буквальное целое число без знака в исходном коде, вы можете использовать суффикс
u
или,U
например123U
.Вам не следует использовать uint и ulong в общедоступном интерфейсе, если вы хотите быть CLS-совместимым .
Прочтите документацию для получения дополнительной информации:
Кстати, есть еще короткие и ushort и byte и sbyte .
источник
u
означаетunsigned
, чтоulong
это большое число без знака. Вы можете хранить большее значение вulong
чемlong
, но никаких отрицательных чисел не допускается.long
Значение сохраняется в 64-битном, с первой цифрой , чтобы показать , если это положительное / отрицательное число. в то времяulong
как тоже 64-битный, со всеми 64-битными для хранения числа. поэтому максимальное значение ulong равно 2 (64) -1, а long - 2 (63) -1.источник
Разница в том, что
uint
иulong
являются типами данных без знака, что означает, что диапазон отличается: они не принимают отрицательные значения:источник
Прошло некоторое время с тех пор, как я 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, когда вам просто нужно быстрое целое число и не заботитесь о диапазоне (кроме подписанного / беззнакового).
источник