Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
logique_et_calcul_booleen [2016/02/25 16:17] gbdivers |
logique_et_calcul_booleen [2016/07/25 18:04] (Version actuelle) gbdivers |
||
---|---|---|---|
Ligne 129: | Ligne 129: | ||
La seconde version de la disjonction est le "OU exclusif" ou "XOR". Dans ce cas, il faut prendre le "OU" au sens strict : "le premier booléen est vrai OU le second booléen est vrai, mais pas les deux en même temps". | La seconde version de la disjonction est le "OU exclusif" ou "XOR". Dans ce cas, il faut prendre le "OU" au sens strict : "le premier booléen est vrai OU le second booléen est vrai, mais pas les deux en même temps". | ||
- | Il n'existe pas en C++ d'opérateur "Ou exclusif", mais il est possible de le simuler avec les autres opérateurs.</note> | + | Il n'existe pas en C++ d'opérateur logique "Ou exclusif", mais il est possible de le simuler avec les autres opérateurs.</note> |
Ces opérateurs peuvent être résumés dans un tableau (appelé table de vérité) : | Ces opérateurs peuvent être résumés dans un tableau (appelé table de vérité) : | ||
Ligne 245: | Ligne 245: | ||
int main() { | int main() { | ||
- | std::cout << std::boolalpha; | + | std::cout << std::noboolalpha; |
std::cout << "| a | b | XOR " << std::endl; | std::cout << "| a | b | XOR " << std::endl; | ||
- | std::cout << "| 0 | 0 | " << (eval(false, false) ? 1 : 0) << std::endl; | + | std::cout << "| 0 | 0 | " << eval(false, false) << std::endl; |
- | std::cout << "| 0 | 1 | " << (eval(false, true) ? 1 : 0) << std::endl; | + | std::cout << "| 0 | 1 | " << eval(false, true) << std::endl; |
- | std::cout << "| 1 | 0 | " << (eval(true, false) ? 1 : 0) << std::endl; | + | std::cout << "| 1 | 0 | " << eval(true, false) << std::endl; |
- | std::cout << "| 1 | 1 | " << (eval(true, true) ? 1 : 0) << std::endl; | + | std::cout << "| 1 | 1 | " << eval(true, true) << std::endl; |
} | } | ||
</code> | </code> | ||
Ligne 287: | Ligne 287: | ||
| 7 | 0111 | f | 1111 | | | 7 | 0111 | f | 1111 | | ||
- | Ainsi, pour convertir la valeur ''0x42'' en binaire, vous devez prendre le premier chiffre (''4''), le convertir en binaire (''0100''), puis faire la même chose avec le second chiffre (''2'', ce qui donne ''0010''). La représentation binaire finale est donc ''0b01000010''. | + | Ainsi, pour convertir la valeur ''0x2a'' en binaire, vous devez prendre le premier chiffre (''2''), le convertir en binaire (''0010''), puis faire la même chose avec le second "chiffre" (''a''), ce qui donne ''1010''). La représentation binaire finale est donc ''0b00101010''. |
<note>Il est quand même possible d'afficher la représentation binaire d'un nombre, en utilisant la classe ''std::bitset''. Cette classe sera étudiée en détail dans un chapitre Complément, mais pour le moment, vous pouvez utiliser la sytnaxe : | <note>Il est quand même possible d'afficher la représentation binaire d'un nombre, en utilisant la classe ''std::bitset''. Cette classe sera étudiée en détail dans un chapitre Complément, mais pour le moment, vous pouvez utiliser la sytnaxe : | ||
Ligne 564: | Ligne 564: | ||
| 1 | 1 | 0 | 1 | 1 | 0 | | | 1 | 1 | 0 | 1 | 1 | 0 | | ||
- | ** Exos**: utilisation de mask avec opérateur logiques. | ||
- | |||
- | ===== Exercices ===== | ||
- | |||
- | Dans un ordinateur, composé de transistors, ces derniers forment des portes logiques. Ces portes permettent de réaliser tous les calculs. | ||
- | |||
- | * pour 1 bit, réécrire l'addition avec les opérations logiques | ||
- | * uniquement avec NAND | ||
- | * pour 8 bits, idem | ||
^ [[calculs_arithmetiques|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[nombres_reels|Chapitre suivant]] ^ | ^ [[calculs_arithmetiques|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[nombres_reels|Chapitre suivant]] ^ | ||
- | {{tag> Cours C++}} |