В чем разница между int, Int16, Int32 и Int64?

В чем разница между int, System.Int16, System.Int32 и System.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.