【C言語】
&& 論理演算子の結果は0/1以外にならない

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)が成立する事はありません。

■実行結果

 ./a.out 
論理演算  =0
ビット演算=1