как проверить, включены ли хотя бы три из последних четырех битов (LSB) - PullRequest
2 голосов
/ 13 января 2010

Я пытался сделать это в C:

    int val = 0xCAFE;
int uc = val & 14;


if (val & 15 == 15 || val & 7 == 7 || val & 11 == 11|| val & 13 == 13 || val & 14 == 14){
    printf("asdjfkadscjas \n");
}

Однако это не печатает случайную строку, как следует. Работало на 15,7,11,13 тыс.

Если кто-нибудь знает лучший способ, который будет полезен. Я плохо с побитовым оператором.

Спасибо

Ответы [ 12 ]

0 голосов
/ 13 января 2010
count  =  (val >> 1) & 1 + (val >> 2)&1 + (val >> 3)&1 + (val&1)

или

count  =  precalculated_counts[val & 0x0F];
0 голосов
/ 13 января 2010

Psuedocode:

int set = 0;
for(i = 0 to 3)
    set++ if val & (1<<i)
if(set >= 3)
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...