False
|
|
True
|
False
|
True
|
|
False
|
True
|
True
|
|
True
|
True
|
True
|
|
ТАБЛИЦА 5.5. Таблица истинности логической операции XOR
|
|
Операнд 1
|
Операнд 2
|
Результат операции Операнд 1 XOR Операнд 2
|
|
False
|
False
|
False
|
|
True
|
False
|
True
|
|
False
|
True
|
True
|
|
True
|
True
|
False
|
|
Логическая операция OR обеспечивается в языке C++ оператором А. Результат получа ется при выполнении операции XOR над битами операндов.
Использование логических операторов C++ NOT (!), AND (&&) и OR (||)
Рассмотрим следующие выражения.
“Если идет дождь И если нет автобуса, то я не могу попасть на работу”.
“Если есть большая скидка ИЛИ если я получу премию, то смогу купить этот авто мобиль”.
программировании необходима некоторая логическая конструкция, где результат двух операций используется в логическом контексте для принятия решения о последу ющем направлении потока программы. Язык C++ предоставляет логические операторы AND и OR, которые можно использовать в условных операторах, а следовательно, услов но изменять поток выполнения программы.
Листинг 5.5 демонстрирует работу логических операторов AND и OR.
ЛИСТИНГ 5.5. Анализ логических операторов C++ && и | |
#include
using namespace std;
2 :
int main()
{
5: cout « "Enter true(l) or false(0) for two operands:" « endl;
bool Opl = false, Op2 = false;
cin » Opl;
cin » Op2;
9:
|
cout
|
«
|
Opl
|
«
|
" AND
|
" «
|
Op2« " = "«
|
(Opl
|
&& Op2)
|
«
|
endl;
|
10:
|
11:
|
cout
|
«
|
Opl
|
«
|
" OR
|
" «
|
Op2 « " = " «
|
(Opl
|
|| Op2)
|
«
|
endl;
|
100 ЗАНЯТИЕ 5. Команды, выражения и операторы
1 2 :
return 0;
}
Результат
Enter true(l) or false(0) for two operands:
1
0
AND 0=0
OR0=1
Следующий запуск:
Enter true(l) or false(0) for two operands:
1
1
1AND1=1
1OR1=1
Анализ
Программа фактически демонстрирует, что позволяют логические операции AND и OR. Однако она не показывают, как их использовать для принятия решений.
листинге 5.6 представлена программа, которая, используя условные и логические операторы, выполняет разные строки кода в зависимости от значений, содержавшихся в переменных.
ЛИСТИНГ 5.6. Использование логических операторов NOT (!)
AND (&&) в условных операторах для изменения потока выполнения____________________
#include
using namespace std;
:
int main()
{
5: cout « "Use boolean values(0 / 1) to answer the questions"
endl;
cout « "Is it raining? ";
bool Raining = false;
cin » Raining;
9:
cout « "Do you have buses on the streets? ";
bool Buses = false;
cin » Buses;
13:
// Условный оператор использует логические операторы AND и NOT
if (Raining && IBuses)
cout « "You cannot go to work" « endl;
else
cout « "You can go to work" « endl;
19:
if (Raining && Buses)
cout << "Take an umbrella" « endl;
Использование операторов
|
101
|
2 2 :
if ((!Raining) && Buses)
cout « "Enjoy the sun and have a nice day" « eridl;
return 0;
}
Результат
Use boolean values(0 / 1) to answer the questions
Is it raining? 1
Do you have buses on the streets? 1
You can go to work
Take an umbrella
Следующий запуск:
Use boolean values (0 / 1) to answer the questions
Is it raining? 1
Do you have buses on the streets? 0
You cannot go to work
Последний запуск:
Use boolean values(0 / 1) to answer the questions
Is it raining? 0
Do you have buses on the streets? 1
You can go to work
Enjoy the sun and have a nice day
Анализ
Код листинга 5.6 использует условные операторы в форме конструкции i f , которая пока еще не рассматривалась. Но все же попробуйте понять поведение этой конструк ции, сопоставив ее с выводом. Строка 15 содержит логическое выражение (R a in in g && !B u s e s ) , которое можно прочитать как “идет дождь И НЕТ автобусов”. Логический опе ратор AND здесь использован для объединения отсутствия автобусов (обозначенного ло гическим оператором NOT перед наличием автобусов) и присутствия дождя.
ПРИМЕЧАНИЕ Более подробная информация о конструкции i f будет приведена на занятии 6,
“Ветвление процесса выполнения программ”.
Код листинга 5.7 использует логические операторы NOT (!) и OR ( | |) для демонстра ции условной обработки.
ЛИСТИНГ 5.7. Использование логических операторов NOT и OR для принятия
решения о том, можете ли вы купить автомобиль своей мечты__________________________
#include
using namespace std;
2 :
int main()
{
ЗАНЯТИЕ 5. Команды, выражения и операторы
cout « "Answer questions with 0 or 1" « endl;
cout « "Is there a deep discount on your favorite car? ";
bool Discount = false;
cin » Discount;
9:
cout « "Did you get a fantastic bonus? ";
bool FantasticBonus = false;
cin » FantasticBonus;
13:
if (Discount || FantasticBonus)
cout « "Congratulations, you can buy that car!" « endl;
else
cout « "Sorry, waiting a while is a good idea" « endl;
return 0;
20: }
Результат
Answer questions with 0 or 1
Is there a deep discount on your favorite car? 0
Did you get a fantastic bonus? 1
Congratulations, you can buy that car!
Следующий запуск:
Answer questions with 0 or 1
Is there a deep discount on your favorite car? 0
Did you get a fantastic bonus? 0
Sorry, waiting a while is a good idea
Последний запуск:
Answer questions with 0 or 1
Is there a deep discount on your favorite car? 1
Congratulations, you can buy that car!
Анализ
строке 14 конструкция i f используется вместе с конструкцией e l s e в строке 16. Конструкция i f выполняет следующий оператор в строке 15, когда условие ( D is c o u n t I | F a n ta s tic B o n u s ) возвращает значение t r u e . Это выражение содержит логический оператор OR и возвращает значение tr u e , даже если нет никакой скидки на ваш любимый автомобиль. Когда выражение возвращает значение f a l s e , выполняется оператор в стро ке 17 после конструкции e l s e .
Побитовые операторы NOT (~), AND (&), OR (|) и XOR (А)
Различие между логическими и побитовыми операторами в том, что они возвращают не логический результат, а значение, отдельные биты которого получены в результате вы полнения оператора над битами операндов. Язык C++ позволяет выполнять такие опе рации, как NOT, OR, AND и исключающее OR (XOR), в побитовом режиме, позволяя манипулировать отдельными битами, инвертируя их при помощи оператора применяя
Использование операторов
|
103
|
операцию OR при помощи оператора | , применяя операцию AND при помощи операто ра &и операцию XOR при помощи оператора А. Последние три выполняются с числами обычно битовой маской).
Некоторые битовые операции полезны в тех случаях, когда каждый из битов, содер жащихся в целом числе, например, определяет состояние некоего флага. Так, целое число размером в 32 бита можно использовать для хранения 32-х логических флагов. Использо вание побитовых операторов показано в листинге 5.8.
ЛИСТИНГ 5.8. Использование побитовых операторов для выполнения операций NOT, AND, OR и XOR с отдельными битами целого числа
#include
#include
Do'stlaringiz bilan baham: |