LINUX.ORG.RU

История изменений

Исправление 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, можно добавить отрицание. Суть та же.

И тогда разница, всё же, получается ого-го!