вначале x = 03, y = 02, z = 01 | |
x | y & z | Целые константы, начинающиеся с цифры 0 (нуль), являются восьмеричными числами. Восьмеричное представление целых чисел особенно удобно, когда приходится работать с поразрядными операциями, так как восьмеричные цифры легко переводятся в двоичные. В этой задаче числа 01, 02, 03 соответствуют числам 1, 2, 3, так что появление восьмеричных чисел служит намеком читателю, что программа рассматривает значения x, y и z как последовательности двоичных цифр. |
(x|(y&z)) | Вследствие приоритетов операций. |
(x|(02&01)) | Самое внутреннее выражение вычисляется первым. |
0|x | В двоичном представлении: 01=1, 02=10, 03=11 10 & 01 ---- 00 |
(03|0) | |
03 |
00 | 11 ---- 11 |
вначале x = 03, y = 02, z = 01 x | y & ~ z (x|(y&(~z))) | |
(x|(y&~01)) | Операция ~ меняет каждый разряд своего операнда на противоположный, так что 0...01 становится 1...10. |
(x|(02&~01)) | |
(03|02) | В двоичном представлении: 0...010 & 1...110 --------- 0...010 |
3 | 10 | 11 ---- 11 |
вначале x = 03, y = 02, z = 01 x ^ y & ~ z | |
(x^(y&(~z))) | Здесь выражение похоже на предыдущее, только операция включающего ИЛИ (|) заменив на операцию исключающего ИЛИ (^). |
(x^(02&~01)) | |
(03^02) 1 | В двоичном представлении: 10 ^ 11 ---- 01 |
вначале x = 03, y = 02, z = 01 x & y && z ((x&y)&&z) ((03&02)&&z) (02&&z) (TRUE&&z) (TRUE&&01) (TRUE&&TRUE) | |
TRUE или 1 | Операция && дает результат ИСТИНА, когда оба операнда имеют значение ИСТИНА |
вначале x = 01 ~ x | x ((~x)|x) (~01|01) | |
1 | В двоичном представлении: 1...110 | 0...001 --------- 1...111 или -1 |
вначале x = 01 x ^ x (01^01) | |
0 | В двоичном представлении: 0...01 ^ 0...01 -------- 0...00 (Ответ будет одним и тем же для всех значений x.) |
вначале x = 01 x <<= 3 x=01<<3 | |
x=8 | В двоичном представлении: 0000...01 << 3 --------- 0...01000, что равно 8 Каждый сдвиг влево на 1 разряд равнозначен умножению на 2. |
вначале y = -01 y <<= 3 y=-01<<3 | |
y=-8 | В двоичном представлении: 1111...11 << 3 --------- 1...11111, или -8 |