К примеру есть участки кода, подобные этим:
d[1 << i][i] = 1;
if (!((mask >> j) & 1) && g[i][j])
d[mask ^ (1 << j)][j] += d[mask][i];
Что означают вот эти знаки >>, <<, ^, & ?
И где можно почитать литературу про подобное?
И как это применяется в олимпиадных задачах?
где почитать:
в абсолютно любой книге по с/с++ в первых главах, где описываются арифметические и логические операции. >>
называется "оператор сдвига влево". <<
называется "оператор сдвига вправо". ^
называется "исключающее или". Если в книге этого нет, выкидывайте такую книгу.
где применяется
Операторы сдвига применяют в "олимпиадных задачах" для быстрого умножения/деления на степени двойки (и не только). Но современные компиляторы часто сами могут это сделать не хуже.
А еще операторы сдвига в С++ являются перегруженными операторами для некоторых классов. Например для cout
и cin
и позволяют делать ввод-вывод более "человечным".
К примеру конструкция 1 << i
очень популярна, если нужно получать степени двойки (очень быстро). 1 << 2 = 4 = 2 в степени 2
, 1 << n = 2 в степени n
.
Попробую объяснить немного неформально, что означает << и >>. Например у нас есть такой код:
#include <stdio.h>
main ()
{
char a = 5 << 2;
printf("%d\n", a);
}
У нас есть число 5 в десятичной системе счисления. Если его перевести в двоичную, будет: 0000 0101. Теперь берём и "сдвигаем" это двоичное представление влево на 2 позиции, добавляя справа нули: 0001 0100. А теперь переведём обратно получившееся двоичное число в десятичную систему счисления: 20. Если скомпилировать данный код и запустить, будет выведено: 20. Аналогично и для операции >>, только сдвиг вправо.
Это бинарные операторы.
<< >> - Операторы сдвига.
& - Побитовое "И"
| - Побитовое "ИЛИ"
^ - Исключающее "ИЛИ"
~ - Оператор дополнения.
Подробнее об бинарных операторах и операциях можно почитать тут: Habrahabr.ru - Очень доступно описано.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Не запускается релизная версия программы сервиса написанная на Qt на Windows xp Service pack 3Windows установлена на Virtual box остальные программы там запускаяются,...
Как убрать стрелки ресайза с правой и нижней стороны блокаЧтобы стрелка для ресайза появлялась и работала только по ярлычку в правом нижнем...