В дополнение к существующим ответам, вот краткое объяснение того, почему числа x
не имеют форму 0b00000
(ноль) или 0b0111..11
(установлены все младшие цифры, это все числа 2 ^n-1 для n> 0) не имеют свойства x&(x+1) == 0
.
Для числа x
вида 0b????1000..00
, x+1
имеет те же цифры, что и x
, за исключениеммладший значащий бит, поэтому x & (x+1)
имеет хотя бы один установленный бит, бит, который отображался как установленный в x
.Для краткого объяснения:
x 0b????1000..00
x+1 0b????1000..01
x&(x+1) 0b????10000000
Для числа x
вида 0b????10111..11
:
x 0b????10111..11
x+1 0b????110000000
x&(x+1) 0b????10000..00
В заключение, если x
не является ни нулем, ни записаннымв двоичном формате со всеми установленными младшими цифрами, тогда x&(x+1)
не равно нулю.