Конструкция вида if (int & int)

255
07 марта 2017, 13:36

Встречаю в коде конструкции вида

int index = 2;
if ((index & 1) == 1)
{..}

Никак не могу понять "сакральный смысл" использования такой конструкции, или это просто в силу привычки люди так пишут.

Answer 1

Это проверка на чётность/нечётность (конкретно в вашем примере на нечетность).

Суть в двоичном представлении числа, в котором самый младший бит является 2 в степени 0, то есть это либо 1, либо 0. Вот если этот младший бит равен 1, значит число — нечётное, а если он равен 0 — то число чётное.

Примеры:

34810 в двоичной – 1010111002, последний бит 0, число чётное.

34710 в двоичной – 1010110112, последний бит 1, число нечётное.

210 в двоичной 102, чётное.

510 в двоичной 1012, нечётное.

P.S. обратил внимание, что в заголовке вопроса указано int & int, а не int & 1, если же имеется ввиду именно int & int, то у побитового and более широкое применение.

Answer 2

& - Логическая операция "И". Побитное умножение одного числа на другое. По сути приведенная выше конструкция означает умножение.

READ ALSO
Нужен совет как вытянуть данные из PDF

Нужен совет как вытянуть данные из PDF

Есть PDF фаил, в котором есть таблица с даннымиТаблица вида "Name - Data" и так в столбик

243
Несколько вопросов по XAML (C#)

Несколько вопросов по XAML (C#)

Написал интерфейс в XAMLДо этого пользовался только Windows Form

357
Изменение значения внутри строки

Изменение значения внутри строки

Есть ли способ изменить значение внутри строки не переводя её в массив символов? Например "Машинная сила" в "Машинная пила"

248