Ответ 1
Выяснилось, что n
равно 0 или точной мощности двух.
Это работает, потому что двоичная степень двух имеет вид 1000...000
и вычитание единицы даст вам 111...111
. Затем, когда вы вместе с ними, вы получаете нуль, например:
1000 0000 0000 0000
& 111 1111 1111 1111
==== ==== ==== ====
= 0000 0000 0000 0000
Любое значение входного сигнала, отличное от нуля (отличное от нуля), не даст вам нуля при выполнении этой операции.
Например, попробуйте все 4-битные комбинации:
<----- binary ---->
n n n-1 n&(n-1)
-- ---- ---- -------
0 0000 0111 0000 *
1 0001 0000 0000 *
2 0010 0001 0000 *
3 0011 0010 0010
4 0100 0011 0000 *
5 0101 0100 0100
6 0110 0101 0100
7 0111 0110 0110
8 1000 0111 0000 *
9 1001 1000 1000
10 1010 1001 1000
11 1011 1010 1010
12 1100 1011 1000
13 1101 1100 1100
14 1110 1101 1100
15 1111 1110 1110
Вы можете видеть, что только 0
и полномочия двух (1
, 2
, 4
и 8
) приводят к битовой схеме 0000/false
, все остальные отличны от нуля или true
.