В чем разница между int
, System.Int16
, System.Int32
и System.Int64
, кроме их размеров?
В чем разница между int, Int16, Int32 и Int64?
Ответ 1
Каждый тип целых чисел имеет различный диапазон емкости хранения
Type Capacity
Int16 -- (-32,768 to +32,767)
Int32 -- (-2,147,483,648 to +2,147,483,647)
Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)
Как заявил Джеймс Сазерленд в его ответе:
int
иInt32
действительно являются синонимами;int
будет немного больше знакомый,Int32
делает 32-битность более явной для тех чтение вашего кода. Я был бы склонен использовать int, где мне просто нужно "целое число",Int32
, где размер важен (криптографический код, структуры), поэтому будущие сопровождающие будут знать, что этоint
, если это необходимо, но следует позаботиться об изменении переменныхInt32
таким же образом.Полученный код будет идентичным: разница является чисто одной из читабельность или внешний вид кода.
Ответ 2
Единственное реальное различие здесь - размер. Все типы int здесь представляют собой целые значения со знаком, которые имеют разные размеры
-
Int16
: 2 байта -
Int32
иint
: 4 байта -
Int64
: 8 байт
Существует одна небольшая разница между Int64
и остальными. На 32-битной платформе назначения в хранилище Int64
не гарантируются как атомарные. Он гарантирован для всех других типов.
Ответ 3
Int
Это примитивный тип данных, определенный в С#.
Он отображается в Int32 типа FCL.
Это тип значения и представляет структуру System.Int32.
Он подписан и занимает 32 бита.
Он имеет минимум -2147483648 и максимальное значение +2147483647.
Int16
Это тип FCL.
В С# short отображается в Int16.
Это тип значения и представляет структуру System.Int16.
Он подписан и принимает 16 бит.
Он имеет минимальное значение -32768 и максимальное значение +32767.
Int32
Это тип FCL.
В С# int преобразуется в Int32.
Это тип значения и представляет структуру System.Int32.
Он подписан и занимает 32 бита.
Он имеет минимум -2147483648 и максимальное значение +2147483647.
Int64
Это тип FCL.
В С# long отображается в Int64.
Это тип значения и представляет структуру System.Int64.
Он подписан и принимает 64 бита.
Он имеет минимум -9,223,372,036,854,775,808 и максимум 9,223,372,036,854,775,807.
Ответ 4
По словам Джеффри Рихтера (одного из разработчиков .NET framework development), книга "CLR via С#":
int - это примитивный тип, разрешенный компилятором С#, тогда как Int32 - это тип библиотеки классов Framework (доступен на всех языках, которые соответствуют CLS). Фактически, int преобразуется в Int32 во время компиляции.
Кроме того,
В С#, длинные карты для System.Int64, но в другом программировании язык, долгое время может отображаться в Int16 или Int32. Фактически, С++/CLI делает долго обрабатывать Int32.
На самом деле, большинство (.NET) языков не будут долго рассматривать как ключевое слово и не будут компилировать код, который его использует.
Я видел этого автора, и многие стандартные литературы по .NET предпочитают типы FCL (то есть Int32) для примитивных типов, специфичных для языка (т.е. int), в основном по таким проблемам взаимодействия.
Ответ 5
Очень важно отметить типы 16, 32 и 64:
если вы запустите этот запрос... Array.IndexOf(новый Int16 [] {1,2,3}, 1)
вы должны получить нуль (0), потому что вы просите... 1 в массиве 1, 2 или 3. если вы получите -1 в качестве ответа, значит, 1 не находится в массиве 1, 2 или 3.
Хорошо проверьте, что я нашел: Все следующие должны дать вам 0, а не -1 (Я тестировал это во всех версиях рамок 2.0, 3.0, 3.5, 4.0)
С#:
Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct)
VB.NET:
Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)
Итак, я хочу сказать, что для сравнения Array.IndexOf доверять только Int32!
Ответ 6
Ничего. Единственное различие между типами - их размер (и, следовательно, диапазон значений, которые они могут представлять).
Ответ 7
-
int
иint32
- одно и то же (32-разрядное целое) -
int16
- короткий int (2 байта или 16 бит) -
int64
- это длинный тип данных (8 байтов или 64 бит).
Ответ 8
Все они представляют собой целочисленные числа разного размера.
Однако очень маленькая разница.
int16, int32 и int64 имеют фиксированный размер.
Размер int зависит от архитектуры, которую вы компилируете, - спецификация C определяет только число, которое больше или равно короткому, хотя на практике это ширина процессора, на который вы нацеливаете, что, вероятно, 32 бит, но вы должны знать, что это может быть не так.
EDIT: Это не совсем так для С#, тега, который я пропустил, когда я ответил на этот вопрос - если есть более конкретный ответ С#, пожалуйста, проголосуйте за это!
Ответ 9
Оба они действительно синонимы. Однако я обнаружил небольшую разницу между ними,
1) Вы не можете использовать Int32
при создании enum
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2) Int32
входит в системное объявление. если вы удалите using.System
, вы получите ошибку компиляции, но не в случае int
Ответ 10
Int = Int32 → Оригинальный длинный тип
Int16 → Оригинал int
Int64 → Новый тип данных станет доступен после 64-битных систем
"int" доступен только для обратной совместимости. Мы должны действительно использовать новые типы int, чтобы сделать наши программы более точными.
---------------
Еще одна вещь, которую я заметил на этом пути, - это класс с именем Int
, похожий на Int16, Int32 и Int64. Все полезные функции, такие как TryParse
для целого числа, относятся к Int32.TryParse
.