×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 33 из 714 Настройки
, если содержит значение >-1, a >b значение >1 и обе переменные имеют тип >int, ожидается результат >-1. Но если переменная имеет тип >int, а переменная >b — тип >unsigned, то значение этого выражения будет зависеть от количества битов, занимаемых типом >int на данной машине. На нашей машине результатом этого выражения оказалось >4294967295.

Упражнения раздела 2.1.2

Упражнение 2.3. Каков будет вывод следующего кода?

>unsigned u = 10, u2 = 42;

>std::cout << u2 - u << std::endl;

>std::cout << u - u2 << std::endl;

>int i = 10, i2 = 42;

>std::cout << i2 - i << std::endl;

>std::cout << i - i2 << std::endl;

>std::cout << i - u << std::endl;

>std::cout << u - i << std::endl;

Упражнение 2.4. Напишите программу для проверки правильности ответов. При неправильных ответах изучите этот раздел еще раз.

2.1.3. Литералы

Такое значение, как >42, в коде программы называется литералом (literal), поскольку его значение самоочевидно. У каждого литерала есть тип, определяемый его формой и значением.

Целочисленные литералы и литералы с плавающей запятой

Целочисленный литерал может быть в десятичной, восьмеричной или шестнадцатеричной форме. Целочисленные литералы, начинающиеся с нуля (>0), интерпретируются как восьмеричные, а начинающиеся с >0x или >0X — как шестнадцатеричные. Например, значение >20 можно записать любым из трех следующих способов.

>20   // десятичная форма

>024  // восьмеричная форма

>0x14 // шестнадцатеричная форма

Тип целочисленного литерала зависит от его значения и формы. По умолчанию десятичные литералы считаются знаковыми, а восьмеричные и шестнадцатеричные литералы могут быть знаковыми или беззнаковыми. Для десятичного литерала принимается наименьший тип, >int, >long, или >long long, подходящий для его значения (т.е. первый подходящий в этом списке). Для восьмеричных и шестнадцатеричных литералов принимается наименьший тип, >int, >unsigned int, >long, >unsigned long, >long long или >unsigned long long, подходящий для значения литерала. Не следует использовать литерал, значение которого слишком велико для наибольшего соответствующего типа. Нет литералов типа >short. Как можно заметить в табл. 2.2, значения по умолчанию можно переопределить при помощи суффикса.

Хотя целочисленные литералы могут иметь знаковый тип, с технической точки зрения значение десятичного литерала никогда не бывает отрицательным числом. Если написать нечто, выглядящее как отрицательный десятичный литерал, например >-42, то знак "минус" не будет частью литерала. Знак "минус" — это оператор, который инвертирует знак своего операнда (литерала).

Литералы с плавающей запятой включают либо десятичную точку, либо экспоненту, определенную при помощи экспоненциального представления. Экспонента в экспоненциальном представлении обозначается символом >E или :

>3.14159 3.14159Е0 0. 0e0 .001

По умолчанию литералы с плавающей запятой имеют тип >double. Используя представленные в табл. 2.2 суффиксы, тип умолчанию можно переопределить.

Символьные и строковые литералы

Символ, заключенный в одинарные кавычки, является литералом типа >char. Несколько символов, заключенных в парные кавычки, являются строковым литералом: