warning: comparison of constant ‘2’ with boolean expression is always false
warning: result of comparison of constant 2 with boolean expression is always false
警告:定数 ‘2’ とboolean式の比較は常に偽
[-Wbool-compare]
[-Wtautological-constant-out-of-range-compare]
■【&&】と【&】の間違い
#include <stdio.h>
#include <stdint.h>
//論理演算
int logop(uint32_t x) {
if ((x && 2) == 2) //★NG
return 1;//ここには来ない
return 0;
}
//ビット演算
int bitop(uint32_t x) {
if ((x & 2) == 2) //OK
return 1;
return 0;
}
int main(void){
printf("論理演算 =%d\n",logop(2));
printf("ビット演算=%d\n",bitop(2));
}
論理演算子の結果は0か1にしかなりません。
したがって(x && 2)の結果は0か1にしかならないので
xの値にかかわらず
if((x && 2) == 2)が成立する事はありません。
■実行結果