Question

question étrange, mais quelqu'un m'a montré cela, Je me demandais pouvez-vous utiliser le pas! opérateur int en C ++? (Son étrange pour moi).

#include <iostream>
using namespace std;

int main()
{
   int a=5, b=4, c=4, d;
   d = !( a > b && b <= c) || a > c && !b;
   cout << d;
   system ("pause");
   return 0;
}
Était-ce utile?

La solution

Oui. Pour les types entiers, retourne ! true si l'opérande est égal à zéro, et false autrement.

!b ici signifie juste b == 0.


Ceci est un cas particulier où une valeur est convertie en bool. Le !b peut être considérée comme !((bool)b) la question est quelle est la « truthness » de b. En C ++, les types arithmétiques, les types de pointeur et ENUM peuvent être convertis en bool. Lorsque la valeur est 0 ou une valeur nulle, le résultat est false, sinon il est true (C ++ §4.1.2).

Bien sûr, les classes personnalisées peuvent même surcharger le operator! ou operator << em> types peuvent être convertis à bool > pour permettre à l'!b pour leurs classes. Par exemple, std::stream a surchargé le operator! et operator void* pour vérifier l'failbit, de sorte que les idiomes comme

while (std::cin >> x) {   // <-- conversion to bool needed here
  ...

peut être utilisé.

(Mais votre code !( a > b && b <= c) || a > c && !b est juste cryptique.)

Autres conseils

A l'origine, en C (sur lequel est basé C ++) il n'y avait pas de type booléen. Au lieu de cela, la valeur « true » a été attribué à une valeur non nulle et la valeur « faux » a été attribué à tout ce qui évalue à zéro. Ce comportement existe encore en C ++. Donc, pour un int x, les expressions !x signifie « x pas vrai », qui est « x pas non nul », à savoir qu'il est vrai si x est égal à zéro.

Vous pouvez, !b équivaut à (b == 0).

Le test int est vrai pour les valeurs non nulles et fausses valeurs nulles, est donc pas seulement vrai pour les valeurs nulles et fausses pour les valeurs non nulles.

L'accumulation dans l'opérateur de ! convertit son argument en bool. La norme précise que il existe une conversion de tout type arithmétique (int, char, .... float, double ...) à bool . Si la valeur source est 0, le résultat est true, sinon il est false

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top