Академический Документы
Профессиональный Документы
Культура Документы
static int i;
double x=8, y = exp(x);
int a, b = 0;
char d = 's';
bool k = true;
float b;
Классы памяти
Каждая переменная характеризуется
некоторым классом памяти, которая
определяет ее время жизни — период, в
течение которого эта переменная
существует в памяти.
1 0 0 1 1
0 0 0 0 0
0 1 0 1 1
1 1 1 0 1
Поразрядные логические операции
работают с целыми числами и
оперируют с их двоичными
представлениями, т.е. работают с
двоичными разрядами операндов.
При поразрядных операциях каждый бит
одного операнда комбинируется (в
зависимости от операции) с
одноименным битом другого, давая бит
результата. При единственной
одноместной поразрядной операции —
отрицании (~) — биты результата
являются инверсией соответствующих
битов ее операнда.
cout << "\n 15 & 9 = " << (15 & 9) << endl;
cout << "\n 15 ^ 9 = " << (15 ^ 9) << endl;
cout << "\n 15 | 9 = " << (15 | 9) << endl;
15 & 9 = 9 15=1111 00001111 00001111 00001111
15 ^ 9 = 6 9=1001 & 00001001 | 00001001 ^ 00001001
15 | 9 = 15 6=0110
00001001 00001111 00000110
17 &15 = 1
17 |15 = 31
17 ^15 =30
Т.к. 1710=100012 1510 =11112 , то дополняем 11112 нулем и согласно
предыдушей таблицы получаем 10001 &01111=00001=1
10001 | 01111=11111=31 15
10001 ^ 01111= 11110=30 30
14
31
17
При сдвиге влево биты первого операнда
перемещаются влево (в сторону старших
битов) на заданное вторым операндом
число позиций. Старшие биты,
оказавшиеся за пределами разрядной
сетки, теряются; справа результат
дополняется нулями.
Результат сдвига вправо зависит от того,
является ли операнд знаковым или без
знаковым. Биты операнда перемещаются
вправо на заданное число позиций.
Младшие биты теряются. Если операнд
— целое со знаком, производится
расширение знакового бита (старшего),
т. е. освободившиеся позиции
принимают значение 0 в случае
положительного числа и 1 — в случае
отрицательного. При без знаковом
операнде старшие биты заполняются
нулями.
Сдвиг влево на n эквивалентен
умножению на соответствующую степень
двойки, сдвиг вправо — делению на 2
степени n.
Например, в результате выполнения операции
сдвига 15>>2 получаем 3, т.к. 1510=11112 при сдвиге
разрядов на 2, младшие биты теряются и получаем
112 , а это 310.
58>>2 = 14 1110102/1002=11102= 1410
58<<2 = 232 1110102*1002=111010002= 23210
^= присвоение XOR X ^= Y Х= X ^ Y
|= присвоение OR X |= Y Х= X | Y
, запятая
В операциях присваивания первый операнд не
может быть нулевым указателям.
Операции присваивания возвращают как
результат присвоенное значение. Благодаря
этому они допускают сцепление. Например, вы
можете написать: А = (В = С = 1) + 1;
Выполняются операции присваивания справа
налево. Поэтому приведенное выражение
задаст переменным В и С значения 1, а перемен-
ной А - 2. Вычисляться это будет следующим
образом. Сначала выполняются операции,
заключенные в скобки, а из них первой - самая
правая (т.е. С = 1). Эта операция вернет 1, так
что далее будет выполнена операция В = 1. Она
вернет значение 1, после чего выполнится опе-
рация сложения 1 + 1. Полученное в результате
значение 2 присвоится переменной А.
Приоритет и ассоциативность операций
Операция Ассоциативность
+- слева направо
== != слева направо
^ слева направо
| слева направо
|| справа налево
?: слева направо
, слева направо
Приоритет и ассоциативность операций
Прио Операция Ассоциати Описание
ритет вность
1 :: слева унарная операция разрешения области
направо действия
[] операция индексирования
() круглые скобки
. обращение к члену структуры или класса
-> обращение к члену структуры или класса
через указатель
2 ++ слева постфиксный инкремент
-- направо постфиксный декремент
3 + справа унарный плюс
- налево унарный минус
++ префиксный инкремент
-- префиксный декремент
! логическое НЕ (NOT)
~ побитовое НЕ (NOT)
& адрес
* разыменование
Прио Операция Ассоциатив Описание
ритет ность
4 * слева умножение
/ направо деление
% остаток от деления
5 + слева сложение
- направо вычитание
6 >> слева сдвиг вправо
<< направо сдвиг влево
7 < слева меньше
<= направо меньше либо равно
> больше
>= больше либо равно
8 == слева равно
!= направо не равно
9 & слева поразрядное И
^ направо поразрядное исключающее ИЛИ
| поразрядное ИЛИ
Прио Операция Ассоциат Описание
ритет ивность
10 && слева логическое И
направо
11 || слева логическое ИЛИ
направо
12 ?: справа условная операция (тернарная
налево операция)
13 = справа присваивание
*= налево умножение с присваиванием
/= деление с присваиванием
%= остаток от деления с
присваиванием
+= сложение с присваиванием
-= вычитание с присваиванием
14 , слева запятая
направо