Простая форма операции присваивания
Формат операции:
Имя переменной = выражение
Пример записи операторов присваивания в программе
1. Переменной х присвоить значение 2.
2. Переменной y присвоить значение х, умноженное на 2.
3. Переменной z присвоить значение y/2.
4. Переменной а присвоить среднее арифметическое чисел х, y, z.(самостоятельно).
int main()
{
int х;
int y;
x=2;
y=x*2;
double z;
z=y/2;
}
Пример программы, которая меняет местами значения двух переменных, используя дополнительную переменные.
int main()
{
int х, temp;
int y;
x=2;
y=3;
temp=x;
x=y;
y=temp;
}
Правила по присваиванию
· Переменной целого типа можно присваивать выражение целого типа. Присваивание выполниться корректно, если значение выражения принадлежит диапазону переменной.
· Переменной целого типа можно присваивать выражение вещественного типа. Но при присваивании в переменную будет записано целое число – округленное вещественное число.
· Переменной вещественного типа можно присваивать выражение вещественного типа, но может произойти усечение точности, если тип переменной ниже тпа выражения
.
Сокращенная форма операции присваивания
Формат
<имя переменной><операция>=выражение
Где <операция> : +, -, *,/, %, <<, >>
Действие: изменяет значение переменной в соответствии с операцией и выражением. Например, оператор - увеличить значение переменной х на 2, будет записан так: x+=2;
Множественная форма операции присваивания
<имя переменной1>=<имя переменной2>∙∙∙<имя переменнойN>=выражение
Действие: выполняется справа налево, значение выражения присваивается переменной <имя переменнойN>, затем значение этой переменной присваивается предыдущей переменной и так далее до первой.
int main()
{
int A,B,C;
A=B=C=10;
}
Инкремент и декремент
а) Инкремент постфиксный
формат
<имя переменной>++
Действие: использование текущего значения переменной, а после этого увеличение значения переменной на 1.
#include "stdafx.h"
#include "iostream"
#include "locale.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "rus");
int a=10;
cout<<"Текущее значение переменной="<<a++<<"\nЗначение переменной после постфиксного инкремента="<<a;
getchar(); getchar();
return 0;
}
Результат
б) Инкремент префиксный
формат
++<имя переменной>
Действие: сначала увеличение значения переменной на 1, а затем используется ее новое значение
int _tmain(int argc, _TCHAR* argv[])
{
double x=123.456;
setlocale(LC_ALL, "rus");
int a=10;
cout<<"Зачение переменной="<<++a<<"\nЗначение переменной после префиксного инкремента="<<a;
}
в) Декремент постфиксный
формат
<имя переменной>--
Действие: используется текущее значение переменной, а затем ее значение уменьшается на 1.
г) Декремент префиксный
формат
<имя переменной>--
Действие: сначала уменьшается значение переменной на 1, а затем ее значение используется в выражении.
8. Поразрядные операции в С++
Могут применяться только к данным в формате целого без знака
1. Сдвиг влево двоичного кода (умножение на 2)
формат операции
x<<n
где х - значение, код которого должен быть изменен
n – Количество разрядов, на который должен быть сдвинут код
Пример. Сдвиг влево двоичного кода числа 5 на два разряда.
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int x=5, n=2;
x=x<<n;
cout<<x; //результат 20
cin.get();
return 0;
}
2. Сдвиг вправо двоичного кода (деление на 2)
формат операции
x>>n
где х - значение, код которого должен быть изменен
n – Количество разрядоd, на который должен быть сдвинут код
Пример. Сдвиг влево двоичного кода числа 20 на два разряда.
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int x=20, n=2;
x=x>>n;
cout<<x; //результат 5
cin.get();
return 0;
}
3. Поразрядное сложение
Используется для установки в 1 заданного бита
Формат
X|Y
X и Y переменные одной разрядности
Таблица битового сложения
0|1=1
0|0=0
1|0=1
1|1=1
Пример установки в бит с номером 5 двоичного кода х значения 1.
Модель решения
Пусть х=1, то его двоичный код в формате одного байта 00000001
Чтобы установить пятый бит х в 1 к нему надо прибавить число с двоичным кодом 00100000 т.е. десятичное 32.
Представим решение в форме
Х : 00000001
|
32: 00100000
00100001 в десятичной системе это число 33
Реализация примера
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char x=1;
x=x|32;
cout<<x; //результат 33
cin.get();
return 0;
}
4. Поразрядное умножение
Используется для обнуления заданного бита
Формат
X & Y
Таблица битового сложения
0&1=0
0&0=0
1&0=0
1&1=1
Пример установки в бит с номером 5 двоичного кода х значения 0.
Модель решения
X: 11111111
&
Y: 11011111
X&Y= 11011111
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char x=255; // 11111111
unsigned char maska =0xEF; //239 =11101111
x=x& maska;
cout<<(int)x; //результат 239
cin.get();
return 0;
}
5. Исключающее ИЛИ (только один из операндов 1)
Используется для проверки соответствующих битов двух переменных, если они имеют разные значения, то результат 1, а если равны , то 0.
Формат
X ^ Y
Таблица битового сложения
0^ 1=1
0^ 0=0
1^ 0=1
1^ 1=0
Пример, проверить, в каких битах Х и У имеют равные хначения.
Модель решения
Z=X^Y
X | ||||||||
Y | ||||||||
Z |
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char x=255; // 11111111
unsigned char maska =0xEF; //239 =11101111
x=x& maska;
cout<<(int)x; //результат 239
cin.get();
return 0;
}
6. Инвертирование
Замена бита 0 на значение 1 и наоборот.
Применяется при проведении операций, требующих инвертирования разрядв
Формат: ~X
Пример. Создать обратный код целого числа.
Пусть Х=11011011, тогда Х=~Х. Результат: 00100100
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char x=20, n=2;
x= ~x;
cout<<(int)x; //результат 235
cin.get();
return 0;
}
Пример. Инвертирование маски перед умножением. Установить пятый бит в 0
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char x=255;
unsigned char maska =0x01; //1=00000001
x=x&(~ (maska<<4));
cout<<(int)x; //результат 239
cin.get();
return 0;
}
Самостоятельно.
1. Х=5. Установить 7 бит в 1.
2. Х=255. Установить 5 и 3 биты в 0.
3. Инвертировать 5 бит переменной х.
4. Вывести все биты значения переменной Х. Размер переменной неизвестен.