Я должен проверить число, если оно удовлетворяет следующим критериям:
- в двоичном коде, все однобитовые значения должны быть последовательными.
- для номера должен быть установлен хотя бы один бит.
- последовательные однобитовые биты могут начинаться в MSB или заканчиваться в LSB, поэтому вполне допустимо, если число состоит из одного однобитового потока, за которым следует нулевой битовый поток или наоборот.
Я написал код, который проверяет эти условия на наличие реальной проблемы (проверка целостности файла данных).
Работает без проблем и совсем не критично ко времени, но я старый урод, немного перепутанный, и мне нравятся такие головоломки, поэтому я попытался найти более умный способ проверить наличие одного-одного-одного. битовые потоки.
Случаи, когда строка окружена нулями, просты, но с особыми случаями не справиться.
Любые идеи, бинарные взломы и частичные решения приветствуются!
Чтобы прояснить мои требования, приведу несколько примеров: Следующие цифры соответствуют моим критериям:
0x80000000
0x00000001
0xff000000
0x000000ff
0xffffffff
0x000ff000
Следующие числа не имеют (поскольку они имеют более одной последовательной строки из них):
0xf00000f <- one-bit streams should not wrap-around at 2^n
0x0001700 <- a trivial example.
0x0000000 <- no one bit at all.