Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

A.2.1. Целочисленные литералы

Целочисленные литералы (integer literals) имеют три разновидности.

• Десятичные: последовательности десятичных цифр.

Десятичные цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9.

• Восьмеричные: последовательности восьмеричных цифр, начинающиеся с нуля.

Восьмеричные цифры: 0, 1, 2, 3, 4, 5, 6 и 7.

• Шестнадцатеричные: последовательности шестнадцатеричных цифр, начинающихся с 0x или 0X.

Шестнадцатеричные цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, A, B, C, D, E и F.

Суффикс u или U означает, что целочисленный литерал не имеет знака, т.е. имеет спецификатор unsigned (см. раздел 25.5.3), а суффикс l или L относит их к типу

long
, например
10u
или
123456UL
.

A.2.1.1. Числовые системы

Обычно мы записываем числа в десятичной системе. Число

123
означает
1
сотню плюс
2
десятки плюс
3
единицы, или
1*100+2*10+3*1
, или (используя символ
^
для обозначения степени)
1*10^2+2*10^1+3*10^0
. Иногда вместо слова десятичный говорят: “База счисления равна десяти” (base-10). В данном случае число 10 означает, что в выражении
1*base^2+2*base^1+3*base^0
выполняется условие
base==10
. Существует много теорий, объясняющих, почему мы используем десятичную систему счисления. Одна из них апеллирует к естественным языкам: у нас на руках десять пальцев, а каждый символ, такой как 0, 1 и 2, представляющий собой цифру в позиционной системе счисления, в английском языке называется digit. Слово Digit в латинском языке означает палец.

Впрочем, иногда используются и другие системы счисления. Как правило, положительные целые числа в памяти компьютера представляются в двоичной системе счисления, т.е. база счисления равна 2 (значения 0 и 1 относительно легко представить с помощью физических состояний). Люди, сталкивающиеся с необходимостью решать задачи на низком уровне аппаратного обеспечения, иногда используют восьмеричную систему счисления (база равна 8), а при адресации памяти чаще используется шестнадцатеричная система (база равна 16).

Рассмотрим шестнадцатеричную систему счисления. Мы должны назвать шестнадцать значений от 0 до 15. Обычно для этого используются следующие символы:

0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
A
,
B
,
C
,
D
,
E
,
F
, где
A
имеет десятичное значение
10
,
B
— десятичное значение
11
и так далее:

A==10
,
B==11
,
C==12
,
D==13
,
E==14
,
F==15

Теперь можем записать десятичное число

123
как
7B
в шестнадцатеричной системе счисления. Для того чтобы убедиться в этом, обратите внимание на то, что в шестнадцатеричной системе счисления число
7B
равно
7*16+11
, что в десятичной системе счисления равно
123
. И наоборот, шестнадцатеричное число
123
означает
1*16^2+2*16+3
, т.е.
1*256+2*16+3
, что в десятичной системе счисления равно
291
. Если вы никогда не сталкивались с недесятичными представлениями целых чисел, то мы настоятельно рекомендуем вам поупражняться в преобразовании чисел из десятичной системы в шестнадцатеричную, и наоборот. Обратите внимание на то, что шестнадцатеричная цифра имеет очень простое соответствие со своим двоичным значением.

Это объясняет популярность шестнадцатеричной системы. В частности, значение байта просто выражается двумя шестнадцатеричными цифрами.

В языке C++ (к счастью) числа являются десятичными, если иное не указано явно. Для того чтобы сказать, что число является шестнадцатеричным, следует поставить префикс

0X
(символ
X
происходит от слова hex), так что
123==0X7B
и
0X123==291
. Точно так же можно использовать символ
x
в нижнем регистре, поэтому
123==0x7B
и
0x123==291
. Аналогично мы можем использовать шестнадцатеричные цифры
a
,
b
,
c
,
d
,
e
и
f
в нижнем регистре. Например,
123==0x7b
.

Восьмеричная система основана на базе счисления, равной восьми. В этом случае мы можем использовать только восемь восьмеричных цифр:

0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
. В языке C++ числа в восьмеричной системе счисления начинаются с символа
0
, так что число
0123
— это не десятичное число
123
, а
1*8^2+2*8+3
, т.е.
1*64+2*8+3
или (в десятичном виде)
83
. И наоборот, восьмеричное число
83
, т.е.
083
, равно
8*8+3
, т.е. десятичному числу
67
. Используя систему обозначений языка C++, получаем равенства
0123==83
и
083==67
.

  • Читать дальше
  • 1
  • ...
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: