2017-02-05 7 views
1

Следующий код из Elements of Programming Interview о том, как найти четность числа.Неожиданное значение для нахождения четности числа

Соотношение числа должно быть 1, если число в 1 нечетное. В противном случае, он должен быть равен 0.

1011 должен возвращать 1

Но код из книги дает 0 за 1011. Что мне не хватает?

public static short parityBitByBitSmart(long x) { 
    short result = 0; 

    while(x != 0) { 
     result ^= 1; 
     x &= (x -1); 
    } 
    return result; 
} 

И, я нашел еще один пример кода, с тем же самым неожиданным результатом

public static short parityBitByBit(long x) { 
    short result = 0; 

    while(x != 0) { 
     result ^= (x & 1); 
     x >>>= 1; 
    } 
    return result; 
} 

ли это игнорирование бит знака?

+0

Нет такой вещи, как «четность числа». Четность может быть определена как нечетная или четная, то есть бит добавляется, чтобы количество бит «1» было нечетным или четным, в зависимости от используемой схемы четности. –

ответ

1

1011 (десятичный) 0b1111110011 (двоичный). И, , что имеет даже номер 1 бит.