Это можно сделать по разному. Но, все же, какой из нижеперечисленных способов получше с точки зрения читабельности и эффективности? Можете перечислить еще пару способов?
int i{10}, n{};
// четное ли число?..
cout << boolalpha;
cout << ++n << ". " << !(i % 2) << endl //true
<< ++n << ". " << (i % 2 == 0) << endl //true
<< ++n << ". " << (~i & 1) << endl //1
<< ++n << ". " << !(i & 1) << endl //true
<< ++n << ". " << ((i & 1) == 0) << endl; //true
И необязательный вопрос: почему в третьем варианте выводится 1
а не true
?
При оптимизации все это будет считаться одинаково, а при известном при компиляции i
- и вовсе во время компиляции.
И даже при неизвестном при компиляции i
будет считаться только один раз - по крайней мере, VC++ именно так и делает, понимая, что все это - записи одного и того же выражения :)
Например, вот такой код
n += !(i % 2);
n += (i % 2 == 0);
n += (~i & 1);
n += !(i & 1);
n += ((i & 1) == 0);
свелся к
not eax
and eax, 1
lea edx, DWORD PTR [rax+rax*4]
Т.е. вычислили один раз через not
и and
, и умножили на 5 :)
Необязательный ответ - в третьем случае это значение типа int
, а в остальных - типа bool
...
Каждый программер делает на свой вкус. Вот, пожалуйста :
# include <iostream>
using namespace std ;
template<class T>
static inline bool oddp(T x){return x bitand 1;}
// и для читаемости
template<class T>
static inline bool nechetn(T x){return x bitand 1;}
template<class T>
static inline bool evenp(T x){return not ( x bitand 1 ) ; }
// и для читаемости
template<class T>
static inline bool chetn(T x){return not ( x bitand 1 ) ; }
int main(){
int i{10}, n{};
// четное ли число?..
cout << boolalpha;
cout << ++n << ". " << !(i % 2) << endl //true
<< ++n << ". " << (i % 2 == 0) << endl //true
<< ++n << ". " << (~i & 1) << endl //1
<< ++n << ". " << !(i & 1) << endl //true
<< ++n << ". " << ((i & 1) == 0) << endl //true
<< ++n << ". " << nechetn(i) << endl
<< ++n << ". " << chetn(i) << endl;
}
и читаемо , и эффективно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При отладке скрипт запускается и работает При выпуске скрипт не открывается и не выполняется
Начал изучать Qt по книге МШлее и дошёл до сигналов и слотов, сам механизм понятен