Ответ заключается в использовании двоичного И.
, поэтому число представлено в памяти в 0 и 1.
скажем, 4 и 5.
4 = 0000 0100
5 = 0000 0101
и каждое четное число имеет ноль в конце, а каждое нечетное число имеет 1 в конце;
в c '1' означает истину, а '0' означает ложь.
так: позволяет код;
function isEven(int num){
return ((num & 0x01) == 0) ? 1 : 0;
}
Здесь 0x01 означает 0000 0001.
таким образом, мы идем 0x01 с данным номером.
представьте, что нет 5
5 |0000 0101
0x01 |0000 0001
---------------
0000 0001
поэтому ответ будет «1».
представьте, что нет 4
4 |0000 0100
0x01 |0000 0001
---------------
0000 0000
поэтому ответ будет «0».
сейчас
return ((num & 0x01) == 0) ? 1 : 0;
расширено до:
if((num & 0x01) == 0){// means the number is even
return 1;
}else{//means no is odd
return 0;
}
Так вот и все.
Конец - бинарные операторы очень важны в мире программистов.
счастливое кодирование.
первый ответ здесь.
РЕДАКТИРОВАТЬ 1:
Общее количество вечера
totalEvens = ((end - start) / 2 + ((((end - start) & 0x01 ) == 0) ? 0 : 1 ));
здесь
(end - start)/2
дает половину от общего числа.
это работает, если один четный, а другой нечетный.
но
((((end - start) & 0x01 ) == 0) ? 0 : 1 )
можно просто заменить на (!isEven(end-start))
Итак, если общее число четное, не добавляйте 1, а добавляйте 1.
это полностью работает.