le maximum de valeur de type int
Est-il un code pour trouver la valeur maximale d'un entier (en conséquence pour le compilateur en C/C++ comme Integer.MaxValue
fonction en java?
- est-il possible de trouver la valeur max de long long int??
- Il suffit de remplacer
int
aveclong long int
dans Gregories de réponse... - sauf que long ne fait pas partie de C++
- En double, par exemple stackoverflow.com/questions/1732011/c-max-integer
- droit, son C99 - mais VC et GCC (sans
-pedantic
) en charge. - Ne pas confondre
int
avec "integer". Il existe plusieurs types integer;int
est juste l'un d'eux.
Vous devez vous connecter pour publier un commentaire.
En C++:
ensuite utiliser
std::numeric_limits
est un type de modèle qui peut être instancié avec d'autres types:Dans C:
ensuite utiliser
ou
min
sont le minimum positif de valeur, où l'entiermin
sont la valeur minimale. En va de même pour le C macros/constantes.uint64_t
etint64_t
, pas deint
.#include <limits>
etint imax = std::numeric_limits<int>::max();
, mais je reçois l'erreurCan't resolve struct member 'max'
. Toutes les idées pour lesquelles cela se produit, et comment le résoudre? Je suis à l'aide de CLion IDE, avec CMake et C++ 11 sur Ubuntu 14.04. Je pense que c'est lié à ce problème(unsigned)-1/2
Je sais que c'est une vieille question, mais peut-être que quelqu'un peut utiliser cette solution:
Jusqu'à présent, nous avons -1 suite, jusqu'à ce taille est une signature de type int.
Standard dit, les bits sont décalés dans sont 1 si la variable est signé et négatif et 0 si la variable serait non signé ou signé et positive.
Comme taille est signé et négatifs nous décalage de bit de signe, qui est de 1, ce qui ne l'aide pas beaucoup, de sorte que nous avons exprimées à unsigned int, la forçant à se déplacer dans 0 au lieu de cela, le réglage du bit de signe à 0 tout en laissant tous les autres bits restent 1.
On peut aussi utiliser un masque et xor mais ensuite nous avons eu à connaître l'exacte bitsize de la variable. Avec le décalage de bits à l'avant, nous n'avons pas de savoir à tout moment combien de bits int a sur la machine ou le compilateur, ni besoin de nous comporter d'autres bibliothèques.
cout << "INT_MAX:\t" << (int) ((~((unsigned int) 0)) >> 1) << '\n' << "UINT_MAX:\t" << ~((unsigned int) 0) << endl;
numeric_limits<int>::max()
- fonctionne aussi en modèle de contextes, mais (pour certains insondable raison pour moi) ne peut pas être utilisé comme une constante de compilation.INT_MAX
- est une macro, assez inutile dans le modèle des fonctions, mais peut être utilisé comme une constante de compilation.numeric_limits
doit être utilisable pour les non-types d'entiers ainsi.constexpr
.Voici une macro-je utiliser pour obtenir la valeur maximale pour les entiers signés, qui est indépendante de la taille de l'entier signé de type utilisé, et pour le gcc -Woverflow ne se plaignent
Pourquoi ne pas écrire un morceau de code comme:
O. K. je ne pas avoir rep de commentaire sur la réponse précédente (de Philippe De Muyter), ni le lever du score, donc un nouvel exemple à l'aide de son définir pour SIGNED_MAX trivialement étendu pour les types non signés:
Contrairement à l'utilisation de cette ou cet en-tête, ici, nous utilisons le type réel du compilateur.
Pour la valeur maximale de int, j'ai l'habitude d'écrire la notation hexadécimale:
au lieu de l'irrégularité de la valeur décimale:
Ce sujet
(1 << (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2))
.C'est le même que
2^(8*sizeof(int)-2) - 1 + 2^(8*sizeof(int)-2)
.Si
sizeof(int) = 4 => 2^(8*4-2) - 1 + 2^(8*4-2) = 2^30 - 1 + 20^30 = (2^32)/2 - 1 [max signed int of 4 bytes]
.Vous ne pouvez pas utiliser
2*(1 << (8*sizeof(int)-2)) - 1
car elle déborde, mais(1 << (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2))
œuvres.Il pourrait être dépendants de l'architecture, mais il ne le travail, au moins dans mon installation.