Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ Metod_new.doc
Скачиваний:
3
Добавлен:
10.11.2019
Размер:
939.52 Кб
Скачать

2. Операції відношення

== дорівнює

> більше

< менше

>= більше або дорівнює

<= менше або дорівнює

!= не дорівнює

Результатом виразу відношення є: 0 - неправда або 1 - істина

cout << 2 == 2 == 2 // 0 - неправда

cout << 2 < 3 // 1 - істина

Вираз відношення - два арифметичних вирази, з’єднані операцією відношення.

Оператор if

Синтаксис:

if ( <вираз> )

{ блок з одного або більш операторів }

Якщо після if стоїть 1 оператор, фігурні дужки можна не ставити.

Оператор if ...else

Синтаксис:

if ( <вираз> )

{ блок з одного або більш операторів }

else

{ блок з одного або більш операторів С++ }

if (Х > 0) Y = X * X;

else Y = 2 * X;

У логічному виразі обчислення виконуються зліва на право. Обчислення припиняються, як тільки результат стає визначеним. Такий засіб називається усіканням.

if ( a > b || c > d || e > f ) – переривається, як тільки обчислюється, що a > b, або c > d.

3. Логічні операції

&& - I

|| - АБО

! - НЕ

!( var1 = = var2 ) – те ж саме var1 ! = var2

Приклад:

if ( ( a< b ) & & ( c > d ) )

cout << 3;

Пріоритетність операцій:

  • арифметичні операції;

  • операцій відношення;

  • логічні операцій.

Усікання може бути використане для коректного обчислення.

Наприклад:

if ( b ! = 0 && a / b > 12.4 ) - коректно, ділення на нуль не буде.

Якщо записати if (a / b > 12.4 && b ! = 0 ) - небезпечно, може бути ділення на нуль.

Логічні вирази повертають значення типу int. Будь-яке ненульове значення розглядається як істина.

4. Додаткові операції

Умовна операція ?

Ця операція може використовуватися замість if ... else

Синтаксис:

результат = вираз1 ? вираз2 : вираз3

Приклад:

int i = 6, j = 8;

int res = ( i < j ) ? i : j;

cout << res << ’\n’; // 6

char rs[10];

strcpy(rs, (i < j) ? "Менше" : "Не менше");

cout << rs; //Менше

Операція інкремент ( ++ ) і декремент ( -- )

Ця операція збільшує або зменшує значення змінної.

При цьому в залежності від розташування справа або зліва від змінної інкремент ++ і -- називають префіксним або постфіксним.

++i означає i = i + 1 або i += 1;

--i означає i = i - 1 або i -= 1;

Якщо змінна має префіксну операцію, вона змінює своє значення перед тим, як буде використана у виразі. Якщо використовується постфіксна операція, то змінна змінить своє значення після обробки виразу:

a = 6;

b = a++ -1 // a = 7 b = 5

Префіксна операція має вищий пріоритет, ніж будь-яка інша операція.

s = ++(a + b ) Помилка!!!

Операція застосовується тільки до змінної.

Приклад:

int i = 1, j = 2, k = 3;

a = i++ + j - --k;

cout << a << i << k // 122

Операція sizeof()

Формат: sizeof ( дані )

sizeof ( тип даних )

sizeof повертає розмір у байтах даних або типів даних.

cout sizeof (float) //4

5. Порозрядні операції

Таблиця 4

Основні порозрядні операції

Операція

Значення

&

Порозрядне І

|

Порозрядне АБО

^

Порозрядне виключаюче АБО

~

Порозрядне заперечення (доповнення до 1)

Таблиця 5

Характеристика основних порозрядних операцій

1-й біт

Операція

2-й біт

Результат

1

&

1

1

1

&

0

0

0

&

1

0

0

&

0

0

1

|

1

1

1

|

0

1

0

|

1

1

0

|

0

0

1

^

1

0

1

^

0

1

0

^

1

1

0

^

0

0

~

1

0

~

0

1

9 & 14 // 8

1 0 0 1

1 1 1 0

1 0 0 0

9 | 14 // 15

1 0 0 1

1 1 1 0

1 1 1 1

9 ^ 14 // 7

1 0 0 1

1 1 1 0

0 1 1 1

~ 9 // 6

1 0 0 1

0 1 1 0

unsigned char u1 = ~9; // 246

signed char u2 = ~9; // -10

unsigned int u3 = ~9; // 65526

signed int u4 = ~9; // -10

unsigned long u5 = ~9; // 4294967286

signed long u5 = ~9; // -10

Приклад визначення парного або непарного значення

#include <iostream.h>

void main()

{

int input;

cin>> input;

if(input & 1) // Істина, якщо число непарне

cout<< input << “Число непарне”;

else

cout<< input << “Число парне”;

}

У ASCII кодах єдина відзнака між маленькими і великими буквами значення 0 або 1 у 5-му біті - для англійських букв.

Біт → 7 6 5 4 3 2 1 0

А → 0 1 0 0 0 0 0 1 → Шест. 41, Дес. 65

а → 0 1 1 0 0 0 0 1 → Шест. 61, Дес. 97

Щоб перетворити символ до верхнього регістру необхідно встановити 0 у 5-й біт.

Для цієї мети можна використовувати маску зі значенням

223(10) = DF(16) = 1 1 0 1 1 1 1 1(2) → бітова маска.

Якщо 5-й біт 0 - не зміниться, якщо 1 - перетвориться в 0.

Приклад:

#include <iostream.h>

#define bitmas (0xDF) // 1 1 0 1 1 1 1 1

void main()

{

char a,b,c;

cin>>a; //g

cin>>b; //M

cin>>c; //p

a = a & bitmas;

b &= bitmas; // Складові поразрядні

c &= bitmas; // операції

cout<<a<<b<<c; //GMP

}

Для переключення заданого біта з 0 у 1 і навпаки, ефективно використовувати виключаюче АБО. Приклад із маскою, аналогічний попередньому.

Порозрядні операції зсуву.

Синтаксис:

a << b → зсув уліво

a >> b → зсув управо

Приклад:

29 << 3 // 232

0 0 0 1 1 1 0 1 // 29

1 1 1 0 1 0 0 0 // 232

← зсув на 3

Ця операція дорівнює 29∙ 23 = 232

Початковий знак від’ємного числа зберігається. При застосуванні порозрядного зсуву до від’ємного числа його знак зберігається, але старші розряди заміняються одиницею, а не нулем. Зсув управо (уліво) на n розрядів відповідно зменшує (збільшує) число в 2n разом.

Приклад порозрядних зсувів.

#include <iostream.h>

void main()

{

int num_1 = 25; // 00011001

int num_2 = 102; // 01100110

int shift_1, shift_2;

shift_1 = num_1 << 3; // 200

shift_2 = num_2 << 3; // 816

cout << shift_1 << «\n» << shift_2;

// 200

// 816

}

Може бути використана складова операція порозрядного зсуву:

<<= — складений порозрядний зсув уліво

>>= — складений порозрядний зсув управо

signed int num1 = 15;

unsigned int num2 = 15;

num1 <<= 4; //множення на 16

num2 >>= 3; //ділення на 8

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]