История изменений
Исправление witaway, (текущая версия) :
Ну там отличия копеешные будут. Но, да можно чередовать, а можно просто сначала кусок одних бит потом кусок других бит. Оставим это следующим господам.
Вы, кстати, только что подкинули крутую идею!
Если биты не чередовать, а взять сначала кусок одних бит, а потом кусок других бит, можно будет очень красиво и быстро отфильтровывать лишние маски:
bool badmask = (mask >> N) & mask > 0;
, при условии, что операции «склеить число» соответствует бит 1.
Ну, или если хочется, чтобы там был именно бит 0, можно добавить отрицание. Суть та же.
И тогда разница, всё же, получается ого-го!
P.s.
Если уж развивать эту тему, можно сделать примерно то же самое и в условиях чередующихся бит.
Тогда чётные и нечетные нужно менять местами.
bool badmask = mask & mask_swapped > 0;
Где
bool mask_swapped = ((mask & 0b101010...) >> 1) | ((mask & 0b010101...) << 1)
Итого
bool bad_mask = mask & (((mask & 0b101010...) >> 1) | ((mask & 0b010101...) << 1))) > 0
Но это уже совсем не красиво и не элегантно :)
Исправление witaway, :
Ну там отличия копеешные будут. Но, да можно чередовать, а можно просто сначала кусок одних бит потом кусок других бит. Оставим это следующим господам.
Вы, кстати, только что подкинули крутую идею!
Если биты не чередовать, а взять сначала кусок одних бит, а потом кусок других бит, можно будет очень красиво и быстро отфильтровывать лишние маски:
bool badmask = (mask >> N) & mask > 0;
, при условии, что операции «склеить число» соответствует бит 1.
Ну, или если хочется, чтобы там был именно бит 0, можно добавить отрицание. Суть та же.
И тогда разница, всё же, получается ого-го!
P.s.
Если уж развивать эту тему, можно сделать примерно то же самое и в условиях чередующихся бит.
Тогда чётные и нечетные нужно менять местами.
bool badmask = mask & mask_swapped > 0;
Где
bool mask_swapped = ((mask & 0b101010...) >> 1) | ((mask & 0b010101...) << 1)
Итого
bool bad_mask = mask & (((mask & 0b101010...) >> 1) | ((mask & 0b010101...) << 1))) > 0
Исправление witaway, :
Ну там отличия копеешные будут. Но, да можно чередовать, а можно просто сначала кусок одних бит потом кусок других бит. Оставим это следующим господам.
Вы, кстати, только что подкинули крутую идею!
Если биты не чередовать, а взять сначала кусок одних бит, а потом кусок других бит, можно будет очень красиво и быстро отфильтровывать лишние маски:
bool badmask = (mask >> N) & mask > 0;
, при условии, что операции «склеить число» соответствует бит 1.
Ну, или если хочется, чтобы там был именно бит 0, можно добавить отрицание. Суть та же.
И тогда разница, всё же, получается ого-го!
P.s.
Если уж развивать эту тему, можно сделать примерно то же самое и в условиях чередующихся бит.
Тогда чётные и нечетные нужно менять местами.
bool badmask = mask & mask_swapped > 0;
Где
bool mask_swapped = ((mask & 0b101010...) >> 1) | ((mask & 0b010101...) << 1)
Итого
bool bad_mask =
mask & (((mask & 0b101010…) >> 1) | ((mask & 0b010101…) << 1))) > 0`
Исходная версия witaway, :
Ну там отличия копеешные будут. Но, да можно чередовать, а можно просто сначала кусок одних бит потом кусок других бит. Оставим это следующим господам.
Вы, кстати, только что подкинули крутую идею!
Если биты не чередовать, а взять сначала кусок одних бит, а потом кусок других бит, можно будет очень красиво и быстро отфильтровывать лишние маски:
bool badmask = ((mask >> N) & mask) > 0;
, при условии, что операции «склеить число» соответствует бит 1.
Ну, или если хочется, чтобы там был именно бит 0, можно добавить отрицание. Суть та же.
И тогда разница, всё же, получается ого-го!