Подтвердить что ты не робот

Разница между long и int в С#?

Какова фактическая разница между long и int в С#? Я понимаю, что в C/С++ long будет 64-битным на некоторых 64-битных платформах (в зависимости от ОС, конечно), но на С# все работает в среде выполнения .NET, так есть ли реальное различие?

Другой вопрос: может ли int провести a long (by cast) без потери данных на всех платформах?

4b9b3361

Ответ 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-разрядное целое число.