#include
using namespace std;
2 :
3 : int main ()
{
unsigned short UShortValue = 65535;
cout « "Incrementing unsigned short " « UShortValue
" gives: ";
cout « ++UShortValue « endl;
:
short SignedShort = 32767;
cout « "Incrementing signed short " « SignedShort« " gives: ";
cout « ++SignedShort « endl;
1 2 :
return 0;
}
Результат
Incrementing unsigned short 65535 gives: 0
Incrementing signed short 32767 gives: -32768
Анализ
Как можно заметить, непреднамеренные ситуации переполнения приводят к непредска
зуемому и не интуитивно понятному поведению приложения. Если по причинам экономии
96 ЗАНЯТИЕ 5. Команды, выражения и операторы
памяти вы использовали тип u n s ig n e d s h o r t , то когда потребуется число 65 536, вы фактически получите число 0.
Операторы равенства (=) и неравенства (!=)
Зачастую необходимо проверить выполнение или не выполнение определенного усло вия прежде, чем предпринять некое действие. Операторы равенства == (операнды равны) и неравенства ! = (операнды не равны) позволяют сделать именно это.
Результат проверки равенства имеет логический
|
тип
|
b o o l, т.е. t r u e (истина) или
|
f a l s e (ложь).
|
|
|
|
|
int
|
MyNum = 20;
|
|
|
//
|
true
|
bool CheckEquality = (MyNum == 20);
|
|
bool Checklnequality = (MyNum != 100);
|
//
|
true
|
bool
|
CheckEqualityAgain =
|
(MyNum ==
|
200);
|
//
|
false
|
bool
|
ChecklnequalityAgain
|
= (MyNum
|
!= 20);
|
//
|
false
|
Операторы сравнения
Кроме проверки на равенство и неравенство, может возникнуть необходимость в срав нении, значение какой переменной больше, а какой меньше. Для этого язык C++ предо ставляет операторы сравнения, приведенные в табл. 5.1.
ТАБЛИЦА 5.1. Операторы сравнения
Оператор
Описание
Меньше (<)
Возвращает значение true, если один операнд меньше другого (Ор1 <Ор2), в противном случае возвращает значение false
Больше (>)
Возвращает значение true, если один операнд больше другого (Opl > Ор2), в противном случае возвращает значение false
Меньше или равно (<=)
Возвращает значение true, если один операнд меньше или равен другому, в противном случае возвращает значение false
Больше или равно (>=)
Возвращает значение true, если один операнд больше или ра вен другому, в противном случае возвращает значение false
Как свидетельствует табл. 5.1, результатом операции сравнения всегда является значе ние t r u e или f a l s e , другими словами, тип b o o l. Следующий пример кода демонстрирует применение операторов сравнения, приведенных в табл. 5.1:
int MyNum =20;
|
// пример целочисленного
|
значения
|
bool CheckLessThan = (MyNum < 100);
|
//
|
true
|
bool CheckGreaterThan = (MyNum > 100);
|
//
|
false
|
bool CheckLessThanEqualTo = (MyNum <= 20);
|
//
|
true
|
bool CheckGreaterThanEqualTo = (MyNum >= 20);
|
//
|
true
|
bool CheckGreaterThanEqualToAgain = (MyNum >= 100);
|
//
|
false
|
Код листинга 5.4 демонстрирует использование этих операторов при отображении ре зультата на экране.
Использование операторов
|
97
|
ЛИСТИНГ S.4. Операторы равенства и сравнения
#include
using namespace std;
int main()
{
5 cout « "Enter two integers:" « endl;
int Numl = 0, Num2 = 0;
cin » Numl;
cin » Num2;
9
bool Equality = (Numl == Num2);
11
|
cout
|
«
|
"Result
|
of equality test: " «
|
Equality « endl;
|
12
|
bool
|
Inequality =
|
(Numl
|
!= Num2);
|
|
13
|
Inequality « endl;
|
14
|
cout
|
«
|
"Result
|
of
|
inequality
|
test: " «
|
15
|
bool
|
GreaterThan
|
=
|
(Numl
|
> Num2);
|
|
16
|
Num2;
|
17
|
cout
|
«
|
"Result
|
of
|
" «
|
Numl «
|
">"«
|
cout « " test: " « GreaterThan « endl;
bool LessThan = (Numl < Num2);
21
|
cout
|
«
|
"Result
|
of
|
" «
|
Numl «
|
" <
|
" «
|
Num2 « " test: "
|
22
|
|
«
|
LessThan
|
«
|
endl;
|
|
|
|
|
bool
|
GreaterThanEquals = (Numl >= Num2);
|
|
23
|
Num2;
|
24
|
cout
|
«
|
"Result of
|
" «
|
Numl «
|
" >=
|
" «
|
25
|
cout
|
«
|
" test: " «
|
GreaterThanEquals
|
«
|
endl;
|
26
|
bool LessThanEquals = (Numl <= Num2);
|
|
|
27
|
|
Num2;
|
28
|
cout
|
«
|
"Result of
|
" «
|
Numl «
|
" <=
|
" «
|
29
|
cout
|
«
|
" test: " «
|
LessThanEquals
|
«
|
endl;
|
30
|
|
|
|
|
|
|
|
|
|
|
return 0;
}
Результат
Enter two integers:
365
-24
Result of equality test: 0
Result of inequality test: 1
Result of 365 > -24 test: 1
Result of 365 < -24 test: 0
Result of 365 >= -24 test: 1
Result of 365 <= -24 test: 0
Следующий запуск:
Enter two integers:
101
101
Result of equality test: 1
Result of inequality test: 0
4 3ak. 3626
98
|
ЗАНЯТИЕ 5. Команды, выражения и операторы
|
Result
|
of
|
101
|
> 101
|
test:
|
0
|
Result
|
of
|
101
|
<
|
101
|
test:
|
0
|
Result
|
of
|
101
|
>=
|
101
|
test: 1
|
Result
|
of
|
101
|
<=
|
101
|
test: 1
|
Анализ
Программа отображает результат различных операций в двоичном виде. Интересно отметить в выводе случай, где сравниваются два одинаковых целых числа. Операторы ==, >= и <= дают идентичный результат.
Тот факт, что вывод операторов равенства и сравнения является двоичным, делает их отлично подходящими для использования в операторах принятия решения и в выражениях условий циклов, гарантирующих выполнение цикла, только пока условие истинно. Более подробная информация об условном выполнении и циклах приведена на занятии 6, “Вет вление процесса выполнения программ”.
Логические операции NOT, AND, OR и XOR
Логическая операция NOT обеспечивается оператором ! и выполняется над одним опе рандом. Таблица истинности для логической операции NOT, которая просто инвертирует значение логического флага, приведена в табл. 5.2.
ТАБЛИЦА 5.2. Таблица истинности логической операции NOT
Операнд Результат операции NOT (Операнд)
False True
True False
Для других операций, таких как AND, OR или XOR, необходимы два операнда. Ло гическая операция AND возвращает значение t r u e только тогда, когда каждый операнд содержит значение tr u e . Действие логической операции AND приведено в табл. 5.3.
ТАБЛИЦА 5.3. Таблица истинности логической операции AND
Операнд 1
a l s e
T ru e F a l s e T ru e
Операнд 2
a l s e F a l s e T ru e T ru e
Do'stlaringiz bilan baham: |