TestUnDeuxTRois
2022-10-09 23:10:16
Rust vérifie-t-il la deuxième condition si la première est fausse (connectée à AND) ?
let calc = calculation(x);
if (calc == calculation(2*x)) & (calc == calculation(3 * x)) {...}
Le deuxième mandat sera-t-il même évalué si le premier échoue ? (si calc n'est pas égal à calcul(2*x), il n'est pas nécessaire d'évaluer le second terme car cette expression if ne peut plus être vraie ; Rust l'évalue-t-il ou non ?)
TestUnDeuxTRois
2022-10-09 23:42:18
Le 09 octobre 2022 à 23:39:00 :
Normalement non
Mais fait gaffe c’est && le ET
& c’est une opération bit a bit
Donc & évaluera les deux termes, && évaluera uniquement le premier terme (dans ce cas). Sinon ce sont les mêmes ? Une raison de ne pas toujours utiliser && ? Ou il doit toujours être utilisé à la place de & ?
hampter02
2022-10-09 23:50:20
Le 09 octobre 2022 à 23:42:18 :
Le 09 octobre 2022 à 23:39:00 :
Normalement non
Mais fait gaffe c’est && le ET
& c’est une opération bit a bit
Donc & évaluera les deux termes, && évaluera uniquement le premier terme (dans ce cas). Sinon ce sont les mêmes ? Une raison de ne pas toujours utiliser && ? Ou il doit toujours être utilisé à la place de & ?
Non ce n’est pas pareil, ce n’est pas les memes applications
Le & va comparer chaque bit de deux nombre binaire et en faire un nouveau, c’est utile pour faire des masques de sous reseaux par exemple
Ex: 010101 & 101010 donnera 000000
Et 11110000 10101111 donera 10100000
Le && c’est le ET conditionnel, il va comparer 2 bool et en donner un nouveau
Ex: true && true = true mais true && false = false
Dans quasiment tous les langages, une optimisation est fait(d’ailleurs je crois qu’on est un peu obligé de la faire mais je vais trop loin)
Si le premier est faux, alors on s’occupe pas du deuxième, on a deja la réponse, pas besoin d’evaluer le deuxième
OhMyLaw
2022-10-22 16:42:48
je sais pas en rust mais en c++, & est un opérateur qui peut être overload il me semble, et dans le & les 2 termes sont évalués, alors que le && n'évalue le 2e terme que si le 1er est true