Целочисленная арифметика
Целые числа
Значение и запись числа
Очевидно, что каждое целое число соответствует какому-то количеству. Очевидно также, что каждое целое число мы привыкли записывать определенным образом, а именно — в десятичной системе, с помощью арабских цифр.
Несмотря на всю очевидность этих утверждений, понимание существенных различий между количеством и записью часто вызывает сложности. Попробуем разобраться в этом.
Количество абсолютно. Независимо от того, на каком языке мы думаем и говорим, независимо от того, каким способом мы записываем числа, три — это всегда три, а семь — всегда семь.
Запись числа относительна. Число, которое по-русски называется СЕМЬ, по-английски называется SEVEN. В десятичной системе это число записывается как 7, в троичной — 21, а б двоичной — 111. В римской записи то же самое число выглядит так: VII. Но все эти записи соответствуют одному и тому же количеству. Это и означает, что запись относительна, а количество абсолютно, то есть не зависит от записи.
Рассмотрим, например, два элементарных факта: число 1999 простое, в числе 1999 три девятки. Они относятся к разным объектам: первый характеризует количество, второй — форму записи числа. Тот факт, что число 1999 простое, никак не зависит от того, каким способом мы это число записываем. Это характеристика числа как такового, характеристика количества. А три девятки в этом числе возникают благодаря десятичной записи.
Этот пример еще раз показывает абсолютность количества и относительность записи.
Воспринимая число, человек часто не отделяет количество от привычной формы записи. Простота числа 1999 и наличие в нем трех девяток многие воспринимают как факты одного порядка, как характеристики одного и того же объекта. Мы легко оперируем такими понятиями, как "количество цифр" и "первая цифра числа", не уточняя, что речь при этом идет не о числе, а о его записи, и часто даже не задумываемся об этом.
В обыденной жизни и в математике на уровне начальной школы такая вольность вполне допустима, но для программиста она уже непростительна. Давайте с самого начала четко разграничивать понятия и называть число числом, а запись — записью.
Целые числа и компьютер
Как представлены числа в компьютере? Что хранится в памяти — число или запись? Ответ на этот вопрос не так прост, как может показаться на первый взгляд.
С одной стороны, собственно число, количество — это абстракция. Чтобы передать информацию о числе, его нужно как-то закодировать, записать, придать ему форму. Компьютер — не исключение, для хранения чисел они должны быть закодированы, то есть каким-то образом записаны. Совершенно не обязательно, чтобы это была привычная нам десятичная форма записи, но какая-то форма необходима.
С другой стороны, обработка целых чисел сводится к небольшому набору арифметических операций, а результат операций определяется числом, а не его записью. И в программах целые числа чаше всего используются именно как числа, независимо от формы их внутреннего представления.
Часто можно услышать, что в компьютере целые числа хранятся в двоичной системе счисления. Да, чаще всего это так. Но это не единственная возможная форма, и не стоит без крайней необходимости существенно использовать двоичное представление в программе.
Правильная программа должна оставаться правильной независимо от внутреннего представления чисел, а значит, она должна иметь дело с числом, а не с его записью.
Поэтому мы поначалу будем считать, что имеем дело с числами, и не будем строить никаких специальных предположений об их внутреннем представлении. А несколько позже мы еще раз вернемся к этому вопросу и посмотрим, какие ограничения накладывает такой подход и как можно эти ограничения обойти.