Integer, Long, Short, Byte – целые числа
Создайте проект с кнопкой и введите такую программу:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a, b, c As Integer
a = 201234567
b = 201234567
c = a + b
WriteLine(c)
End Sub
Каждая из переменных a и b имеет значение где-то около 200 миллионов. Работает программа нормально. Вот результат:
402469134
Посмотрим, насколько большие числа способна воспринимать наша программа. Добавим пару цифр к значению a:
a = 20123456789
VB подчеркивает литерал и выдает всплывающую подсказку об ошибке, в которой мы видим слово Integer. В чем дело?
Как видно из таблицы, число типа Integer занимает в памяти 4 байта. Значит, под переменные а и b компьютер отводит в памяти ячейки по 4 байта каждая. 4 байта – это небольшой объем памяти и уместиться в него может целое число не слишком большого размера, а именно, как мы видим в таблице – в диапазоне плюс-минус два миллиарда с небольшим. Мы же, дописав две цифры, превысили это число, вот VB и сказал нам, что типу Integer не по чину быть таким большим.
Зададим а и b значения двухмиллиардные:
a = 2012345678
b = 2012345678
VB не возражает, но когда мы запускаем проект и нажимаем на кнопку, выдает сообщение об ошибке, в котором мы видим слово overflow, что означает «переполнение».
Дело в том, что суммируя, вычитая или умножая числа типа Integer, VB присматривает, чтобы и результат умещался в тип Integer. Ведь два миллиарда плюс два миллиарда будет четыре миллиарда, а это слишком много для Integer.
Что же делать, если нам нужно больше? В этом случае наши переменные должны быть рассчитаны на более длинные числа. Для того, чтобы переменная имела право принимать значения очень больших целых чисел, она должна быть объявлена не как Integer, а как Long
(Длинное Целое). Под переменную типа Long компьютер, как мы видим в таблице, отводит в памяти 8 байтов и поэтому она может принимать значения чисел длиной в 19 цифр.
Объявите все три переменные, как Long. Тогда все будет в порядке. Вы скажете: это нелогично, достаточно было объявить типом Long одну переменную c! Попробуйте и посмотрите, будет ли работать программа. Не работает. Опять overflow! VB считает, что так безопаснее. Строговато, но делать нечего. Впредь объявляйте все
переменные, участвующие в вычислениях, самым вместительным типом из тех, что могут понадобиться для результатов вычислений.
Зачем нужен Integer, если есть Long? Ну, хотя бы для того, чтобы экономить память. Из соображений экономии можно использовать и типы Short и Byte (см. таблицу).
Задание 10.
Население Москвы равняется а=9000000 жителей. Население Васюков равняется b=1000 жителей. Вся Москва переехала в Васюки. Сколько там стало жителей? Используйте переменные величины – сначала типа Short, а когда не получится – Integer.