C# поддерживает 8 типов целочисленных значений. Каждый из них имеет своё преимущество и свой недостаток. Казалось бы, сделали бы самое максимальное возможное число и был бы 1 тип. Но, дело в том, что чем тип больше, тем он медленнее при огромных количествах мелких расчётов.
Приведём таблицу этих типов:
Тип |
Размер в ОЗУ |
Диапазон |
sbyte |
1 байт |
-128..127 |
short |
2 байта |
-32768..32767 |
int |
4 байта |
-2147483648..2147483647 |
long |
8 байтов |
-9223372036854775808..9223372036854775807 |
А так же более редкий случай только положительных значений той же длины:
Тип |
Размер в ОЗУ |
Диапазон |
byte |
1 байт |
0..255 |
ushort |
2 байта |
0..65535 |
uint |
4 байта |
0..4294967295 |
ulong |
8 байтов |
0..18446744073709551615 |
Что означает понятие "Размер в ОЗУ"? Числа хранятся в оперативном запоминающем устройстве (ОЗУ) или проще, памяти. Учитывая 8-битную систему (подробнее смотрите
тут).
Получается, если вам надо сохранить 1 000 000 возрастов людей, можно воспользоваться типом byte, т.к. возраст не может быть отрицательным и вряд ли кто-то проживёт большее 255 лет. В этом случае 1 миллион таких записей будет занимать в ОЗУ 1 мегабайт.
Для хранения таких же данных, но типом long понадобится 8 мегабайт ОЗУ.
Над этим стоит задуматься, когда речь пойдёт по сотнях миллионов значений, и не только хранение возраста, а ещё и роста, веса, кол-ва родственников данного человека, № его паспорта и прочее.
Откуда берутся именно такие числа? Ответ прост. Учитывая 8-битную систему, получаем:
2
8 = 256 (1 байт)
2
16 = 65536 (2 байта)
2
32 = 4294967296 (4 байта)
2
64 = 18446744073709551616 (8 байтов)
Почему -128? Но +127. Почему -32768, но +32767?
Потому что счёт отрицательных чисел начинается с -1 и до -32768.
А счёт
неотрицательных чисел начинается с 0 и до 32767.
Получается, ровно две половины.
Так же и с любым другим знаковым типом short, int, long
При первом использовании переменной необходимо указать её тип. Например:
[code]
int a = 155;
int b = 200;
int c = a * b;
short k = 0;
long m = 16;
int age = 25;
double weight = 74.5;
int height = 181;
[/code]
Дополнительная информация о том, как вывести результат в
консоли или
WinForm