Разница между long и int в С#?
Какова фактическая разница между long
и int
в С#? Я понимаю, что в C/С++ long будет 64-битным на некоторых 64-битных платформах (в зависимости от ОС, конечно), но на С# все работает в среде выполнения .NET, так есть ли реальное различие?
Другой вопрос: может ли int
провести a long
(by cast) без потери данных на всех платформах?
Ответы
Ответ 1
a int
(aka System.Int32
в среде исполнения) всегда является 32-битным целым числом на любой платформе, a long
(aka System.Int64
) всегда является подписанным 64-битным целым числом на любой платформе. Таким образом, вы не можете отбрасывать из long
со значением выше Int32.MaxValue
или ниже Int32.MinValue
без потери данных.
Ответ 2
int в С# = > System.Int32 = > от -2,147,483,648 до 2,147,483,647.
long в С# = > System.Int64 = > от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
Если ваши длинные данные превышают диапазон int, и вы используете Convert.ToInt32, тогда он будет перебрасывать OverflowException, если вы используете явное приведение, результат будет неожиданным.
Ответ 3
int
- 32 бита в .NET. long
- 64 бит. Это гарантировано. Таким образом, нет, int
не может долго оставаться без потери данных.
Там тип, размер которого изменяется в зависимости от платформы, на которой вы работаете, это IntPtr
(и UIntPtr). Это может быть 32-разрядный или 64-разрядный.
Ответ 4
Конечно, это разница. В С# long - это 64-битное целое число со знаком, int - это 32-битное целое число со знаком и что всегда будет всегда.
Итак, в С#, long может содержать int, но int не может содержать long.
C/С++, вопрос зависит от платформы.
Ответ 5
В С# a int
является System.Int32
, a long
является System.Int64
; первый - 32 бита, а более поздние - 64 бит.
С++ дает лишь смутные гарантии относительно размера int/long, в сравнении (вы можете выкопать стандарт С++ для точных, gory, деталей).
Ответ 6
Я думаю, что int представляет собой 32-разрядное целое число, а long - это 64-разрядное целое число.