移転しました。

条件演算子とビット演算子

条件演算子とビット演算子の違いは、プログラミング言語の最初に出てくる項目のため、機能を丸暗記してしまって理解しないままの場合が多いと思います。
私もWebの開発で「&」や「|」を利用する機会がないので、曖昧なままです。二つの演算子の説明で一般的な論を知りませんが、私が教わったのは以下のようなものです。まず、次の二つのコードがあるとします。

int a = 50;
if (a > 0 & a < 100) {
    System.out.println("true");
}
int a = 50;
if (a > 0 && a < 100) {
    System.out.println("true");
}

この場合では、どちらもif文の真偽値はtrueなのでifブロックが実行されます。この違いの説明としては、「&」の場合はまず左を判定した後に必ず右も判定するが、「&&」の場合は左がfalseの場合は右を判定する必要がないので、その時点で結果をfalseと判定してifブロックを実行しない、というものです。
その通りですが、この説明はあまり意味のない説明だと思います。少なくとも私はこの説明の為にいつまでたっても「&」の現実味が沸きません。
その理由は、上記のような例では常に「&&」と書けば解決するので、「&」の存在価値が解らないからです。そもそもif文で例を出すのが良くないのかとも思います。
私の認識ではビット演算子は計算です。ビット演算の計算は縦でイメージすると解り易いのですが、1バイトのデータ同士を「&」で計算すると

10101010
10000010
--------
10000010

というように1と1の場合のみ1となりますので、この結果を何かと比較して真偽値を取るのであれば理解しやすいです。バイトのままイメージで書けば、

if ((10101010 & 10000010) == 10000010) {
    // このコードだとintの比較なのでおかしいですが。
}

となり、これなら「&」を演算子として利用する意味があるような気がします。
「|」にしても同じだと思いますが、そもそも条件演算子とビット演算子が同列で比較されるのが変な気がします。特にJavaの場合はC言語と違って「0」と「1」で真偽を表現できないので、ますますif文では「&&」か「||」しか登場しません。
上手く説明しているサイトはないものでしょうか。いや、上手く利用しているコードを見れば理解できるような。