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