logical
traite uniquement des valeurs true/false. Les bits composant sont non pertinents, il y a juste tout-zéros (faux), et pas-tous-zéros (vrai).
bitwise
fait exactement ce que son nom l'indique - il considère les bits individuels.
a = 42 00101010
b = 23 00010111
c = 0 00000000
a || b -> true a && b -> true
a | b -> 63 a & b -> 2
a || c -> true a && c -> false
a | c -> 42 a & c -> 0
De façon plus détaillée:
a || b -> 00101010
|| 00010111
-----------
00111111 -> 63, which is non-zero, therefore -> TRUE
a | b
est exactement la même chose, mais comme il est seulement traiter les bits, le calcul s'arrête à 63
.
a && b -> 00101010
&& 00010111
-----------
00000010 -> 2 -> non-zero, therefore -> TRUE
Si l'on ajoute à d = 21
:
a && d -> 42 && 21 -> 00101010
&& 00010101
-----------
00000000 -> all-zeroes, therefore false
l'un est l'opération de bit, l'autre est logique. on produit une séquence de bits dans un type de données entier différent, on donne booléen définitivement. – HuStmpHrrr