Преобразование в int16, int32, int64 - как узнать, какой выбрать?

StackOverflow https://stackoverflow.com/questions/270263

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне часто приходится преобразовывать полученное значение (обычно в виде строки), а затем преобразовывать его в int. Но в C # (.Net) вы должны выбрать int16, int32 или int64 - как вы узнаете, какой из них выбрать, если не знаете, насколько большим будет ваш восстановленный номер?

Это было полезно?

Решение

Каждый, кто упомянул, что объявление Int16 спасает оперативную память, должен получить понижающее голосование.

Ответ на ваш вопрос заключается в использовании ключевого слова " int " (или, если хотите, используйте " Int32 ").

Это дает вам диапазон до 2,4 миллиарда чисел ... Кроме того, 32-битные процессоры будут лучше обрабатывать эти целые числа ... также (и САМАЯ ВАЖНАЯ ПРИЧИНА ) такова, что если вы планируете используя этот int практически по любой причине ... скорее всего, он должен быть " int " (Int32).

В платформе .Net 99,999% числовых полей (которые являются целыми числами) являются "целыми числами". (Int32).

Пример: Array.Length, Process.ID, Windows.Width, Button.Height и т. д., т. д. и т. д., 1 млн. раз.

РЕДАКТИРОВАТЬ: я понимаю, что моя сварливость собирается поставить меня в тупик ... но это правильный ответ.

Другие советы

Просто хотел добавить это ... Я вспомнил, что во времена .NET 1.1 компилятор был оптимизирован так, что операции 'int' на самом деле быстрее, чем операции с байтами или короткие операции.

Я считаю, что это все еще актуально сегодня, но сейчас я провожу некоторые тесты.

<Ч>

РЕДАКТИРОВАТЬ: я получил неожиданное открытие: операции сложения, вычитания и умножения для коротких (s) фактически возвращают int!

Повторная попытка TryParse () не имеет смысла, у вас уже объявлено поле. Вы не можете изменить свое мнение, если не сделаете это поле типа Object. Не очень хорошая идея.

Любые данные, которые представляет поле, имеют физический смысл. Это возраст, размер, количество и т. Д. Физические величины имеют реальные ограничения по своему диапазону. Выберите тип int, который может хранить этот диапазон. Не пытайтесь исправить переполнение, это будет ошибка.

Вопреки наиболее популярному в настоящее время ответу, более короткие целые числа (например, Int16 и SByte) часто занимают меньше места в памяти, чем большие целые числа (например, Int32 и Int64). Вы можете легко проверить это, создав большие массивы sbyte / short / int / long и используя perfmon для измерения размеров управляемой кучи. Это правда, что многие разновидности CLR расширяют эти целые числа для специфичных для ЦП оптимизаций при выполнении арифметических операций над ними и тому подобным, но когда они хранятся как часть объекта, они занимают столько памяти, сколько необходимо.

Итак, вам определенно следует учитывать размер, особенно если вы будете работать с большим списком целых чисел (или с большим списком объектов, содержащих целочисленные поля). Вам также следует учитывать такие вещи, как соответствие CLS (которое запрещает любые целые числа без знака в открытых членах).

Для простых случаев, таких как преобразование строки в целое число, я согласен, что Int32 (C # int) обычно имеет смысл и, скорее всего, того ожидают другие программисты.

Если мы просто говорим о паре цифр, выбор наибольшего не изменит вашего общего использования памяти, а просто сработает. Если вы говорите о множестве чисел, вам нужно использовать для них TryParse () и выяснить наименьший тип int, чтобы сохранить оперативную память.

Все компьютеры конечны. Вам необходимо определить верхний предел на основе того, что, по вашему мнению, будут соответствовать требованиям пользователей.

Если у вас действительно нет верхнего предела и вы хотите разрешить «неограниченные» значения, попробуйте добавить в ваш проект библиотеки времени выполнения .Net Java, которые позволят вам использовать класс java.math.BigInteger, который выполняет математику почти целое число неограниченного размера.

Примечание. Java-библиотеки .Net поставляются с полной версией DevStudio, но я не думаю, что они поставляются с Express.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top