/* Done by TheTutor -- 7/18/01
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
Эта обучалка фокусируется на "бинарных операторах" - бинарные операторы, которые
мы будем сейчас обсуждать это
AND (в программах пишется как '&')
OR (в программах пишется как '|')
XOR "exclusive or" (исключающее или) (в программах пишется как '^')
А теперь небольшой урок о двоичных числах.
Сперва необходимо дать математическое определение числам десятичной системы счисления (тем
что мы используем всегда -- 1, 2, 3...) И еще кое-что: Я буду обозначать возведение
в степень знаком '^' -- Например 2^2 = 4
Десятичная система работает так: если у нас например число 21, можно записать
10^4 10^3 10^2 10^1 10^0
0 0 0 2 1
Это значит (2 * 10^1) + (1 * 10^0) В итоге получаем:
(2 * 10) + (1 * 1) = 21
Понятно ли вам это? -- Посмотрите внимательно, и вы должны понять.
А теперь, двоичная система работает точно так же.
Представим число 21 в двоичной системе
2^5 2^4 2^3 2^2 2^1 2^0
0 1 0 1 0 1
Это значит что у нас (0 * 2^5) + (1 * 2^4) + (0 * 2^3) + (1 * 2^2) + (0 * 2^1) + (1 * 2^0)
Здесь идет подсчет: 0 + 16 + 0 + 4 + 0 + 1 = 21
Не правда ли довольно просто?
Теперь, когда вы эксперт по двоичным числам, продолжим
Используем в качестве примера числа 5 и 6. Сначала
запишем их в двоичной системе
101 = 5
110 = 6
Оператор AND (И) работает так:
0 AND 0 равно 0
0 AND 1 равно 0
1 AND 0 равно 0
1 AND 1 равно 1
Точно так же, как мы складываем числа столбиком справа налево (можно наоборот)
101
110 AND
---
100 = 4 Итак, 5 & 6 = 4 -- Отлично, теперь вы знаете оператор AND
*********************************************************************
Оператор OR (ИЛИ) -- Снова возьмем 5 и 6.
Оператор OR работает так:
0 OR 0 равно 0
0 OR 1 равно 1
1 OR 0 равно 1
1 OR 1 равно 1
И тогда:
101
110 OR
---
111 = 7 Таким образом 5 | 6 = 7 -- теперь вы знаете оператор OR
********************************************************************
И наконец, оператор XOR (exclusive or, исключающее ИЛИ) -- И снова наши числа 5 и 6
Оператор XOR работает так:
0 XOR 0 равно 0
0 XOR 1 равно 1
1 XOR 0 равно 1
1 XOR 1 равно 0
И тогда:
101
110 XOR
---
011 = 3 Таким образом 5 ^ 6 = 3 -- теперь вы знаете оператор XOR
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Я поместил "таблицу истинности" внизу этого файла .c
Теперь несколько практических примеров
*/
#include <stdio.h> // Чтобы использовать printf()
int main()
{
int num1 = 8;
int num2 = 3;
int answer = 6; // Здесь мы будем хранить ответы
// Я предлагаю для вашего же блага ВЫЧИСЛИТЬ НА БУМАГЕ что же должно напечататься
// Сделав это один раз, вы все хорошо запомните :)
// Результат num1 AND num2
answer = num1 & num2;
printf("%d & %d = %d\n\n",num1,num2,answer);
// Результат num1 OR num2
answer = num1 | num2;
printf("%d | %d = %d\n\n",num1,num2,answer);
// Результат num1 XOR num2
answer = num1 ^ num2;
printf("%d ^ %d = %d\n\n",num1,num2,answer);
// Результат (num1 AND num2) XOR (num1 OR num2)
answer = (num1 & num2) ^ (num1 | num2);
printf("(%d & %d) ^ (%d | %d) = %d\n",num1,num2,num1,num2,answer);
return 0; // Конец программы
} // конец main()
// Практическое использование -----
/* Самый быстрый способ установить переменной нулевое значение - сделать это с помощью XOR
Если у нас int an_int = 7;
и мы хотим установить ее в 0, то можно записать:
an_int = an_int ^ an_int; --- Или в короткой записи -- an_int ^= an_int;
Хороший компилятор заменяет все "an_int = 0;" на "an_int ^= an_int"
VC++ делает это очень хорошо
Еще один пример - если мы хотим узнать, четное ли число
Это делают следующие строки:
if((a_number & 1) != 0)
// Число нечетное
else
// Число четное
*/
/* Таблица истинности:
AND OR XOR
00| 0 0 0
-------------------
01| 0 1 1
-------------------
10| 0 1 1
-------------------
11| 1 1 0
-------------------
*/
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
|