В чем разница между int, System.Int16, System.Int32и System.Int64другие , чем их размеры?
В чем разница между int, System.Int16, System.Int32и System.Int64другие , чем их размеры?
Ответы:
Каждый тип целого числа имеет различный диапазон емкости
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переменных таким же образом. ,Результирующий код будет идентичен: разница только в удобочитаемости или внешнем виде кода.
intэто всегда Int32 , независимо от системы. Возможно, вы думаете о C ++?
Единственная реальная разница здесь - размер. Все типы int здесь являются целочисленными значениями со знаком, которые имеют различные размеры
Int16: 2 байтаInt32и int: 4 байтаInt64 : 8 байтЕсть одна небольшая разница между Int64остальным. На 32-битной платформе назначения в Int64хранилище не гарантируются как атомарные. Это гарантировано для всех других типов.
Int64в 32 bit Windows Operating Systemто , что есть вопросы , я мог бы столкнуться? Есть ли пример?
ИНТ
Это примитивный тип данных, определенный в C #.
Он сопоставлен с Int32 типа FCL.
Это тип значения, представляющий структуру System.Int32.
Он подписан и занимает 32 бита.
Он имеет минимальное значение -2147483648 и максимальное значение +2147483647.
Int16
Это тип FCL.
В C # шорт отображается на Int16.
Это тип значения, представляющий структуру System.Int16.
Он подписан и занимает 16 бит.
Он имеет минимальное значение -32768 и максимальное значение +32767.
Int32
Это тип FCL.
В C # int отображается на Int32.
Это тип значения, представляющий структуру System.Int32.
Он подписан и занимает 32 бита.
Он имеет минимальное значение -2147483648 и максимальное значение +2147483647.
Int64
Это тип FCL.
В C # long отображается на Int64.
Это тип значения, представляющий структуру System.Int64.
Он подписан и занимает 64 бита.
Он имеет минимальное значение –9,223,372,036,854,775,808 и максимальное значение 9,223,372,036,854,775,807.
Int64тип данных может быть представлен с помощью Lили lсуффикс время Int16или Int32не имеют суффикс в C #.
Согласно книге Джеффри Рихтера (одного из авторов разработки .NET Framework) «CLR via C #»:
int - это примитивный тип, разрешенный компилятором C #, тогда как Int32 - это тип библиотеки классов инфраструктуры (доступен для языков, которые соответствуют CLS). Фактически, int переводится в Int32 во время компиляции.
Также,
В C # long отображается на System.Int64, но на другом языке программирования long может отображаться на Int16 или Int32. На самом деле, C ++ / CLI обрабатывает как Int32.
На самом деле, большинство (.NET) языков даже не будут обрабатываться как ключевое слово и не будут компилировать код, который его использует.
Я видел этого автора и много стандартной литературы по .NET, предпочитая типы FCL (т. Е. Int32) специфичным для языка примитивным типам (т. Е. Int), главным образом по таким вопросам совместимости.
Ничего. Единственная разница между типами - это их размер (и, следовательно, диапазон значений, которые они могут представлять).
Очень важное замечание по 16, 32 и 64 типам:
если вы выполните этот запрос ... Array.IndexOf (new 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)
C #:
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!
shortих размещения в массиве, а второй литерал 1 остается обычным int. (int)1не считается равным (short)1, (short)2, (short)3, таким образом , результат равен -1.
Array.IndexOf(new Int16(){1,2,3}, 1S) Array.IndexOf(new Int32(){1,2,3}, 1I) Array.IndexOf(new Int64(){1,2,3}, 1L)все работает как положено.
Object[],Objectперегрузку. C # неявно воскрешая intк longпри необходимости (а также поднимает shortАня intили long), но не будет неявно вниз, используя objectперегрузку вместо этого. С Option Strict Onили OffVB будет использовать типизированную перегрузку, только если предоставлены унифицированные типы, в противном случае она использует objectперегрузку.
for Array.IndexOf comparisons, only trust Int32!неверный. Если вы 1приведете последний аргумент к соответствующему типу Array, он будет работать как положено.
РЕДАКТИРОВАТЬ: Это не совсем верно для C #, тег, который я пропустил, когда я ответил на этот вопрос - если есть более конкретный ответ C #, пожалуйста, проголосуйте за это!
Все они представляют собой целые числа разных размеров.
Тем не менее, есть очень очень маленькая разница.
int16, int32 и int64 имеют фиксированный размер.
Размер int зависит от архитектуры, для которой вы компилируете - спецификация C определяет только int как большее или равное короткому, хотя на практике это целевая ширина процессора, которая, вероятно, составляет 32 бита, но вы должны знать что это не может быть.
intи int32являются одним и тем же (32-разрядное целое число)int16 короткий int (2 байта или 16 бит)int64 это длинный тип данных (8 байт или 64 бита)intэто псевдоним для Int32и, следовательно, всегда гарантированно будет 32 бита.
Они оба действительно являются синонимами, однако я обнаружил небольшую разницу между ними,
1) Вы не можете использовать Int32при созданииenum
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2) Int32подпадает под Системную декларацию. если вы удалите, using.Systemвы получите ошибку компиляции, но не в случаеint
Int = Int32 -> Оригинальный длинный тип
Int16 -> Оригинальный int
Int64 -> Новый тип данных становится доступным после 64-битных систем
«int» доступен только для обратной совместимости. Мы должны действительно использовать новые типы int, чтобы сделать наши программы более точными.
---------------
Еще одна вещь, которую я заметил на этом пути, - это отсутствие классов с именами, Intаналогичными Int16, Int32 и Int64. Все полезные функции, такие как TryParseдля целых чисел, взяты из Int32.TryParse.
int16для экономии ресурсов памяти, а не просто использоватьint?