Est-ce que `int` est par défaut` signed long int` en C ++?
Est int
par défaut signed long int
en C++?
Est-il de la plateforme et/ou le compilateur à charge? Si oui, comment?
[MODIFIER]
Sont les suivantes garanti en double?
signed short int
signed int
signed long int
signed long long int
unsigned short int
unsigned int
unsigned long int
unsigned long long int
source d'informationauteur qazwsx
Vous devez vous connecter pour publier un commentaire.
Tous les entiers types sont différents, c'est à dire que vous pouvez en toute sécurité la surcharge de fonctions pour chacun d'eux, et vous n'aurez pas de conflit. Cependant, parfois le même nombre de bits pour leur représentation. Même si elles utilisent le même nombre de bits entiers signés et non signés ont toujours une portée différente. Sauf pour
char
à l'aide de tout type entier sanssigned
est équivalent à l'utilisation avecsigned
c'est à diresigned int
etint
sont équivalentes.char
est un autre type designed char
etunsigned char
maischar
a la même représentation et de la gamme designed char
ouunsigned char
. Vous pouvez utiliserstd::numeric_limits<char>::is_signed
à savoir qu'il utilise.Sur les aspects les plus intéressants. Les conditions suivantes sont toutes remplies:
7 <= std::numeric_limits<signed char>::digits
sizeof(char) == 1
sizeof(char) == sizeof(signed char)
sizeof(char) == sizeof(unsigned char)
15 <= std::numeric_limits<short>::digits
sizeof(char) <= sizeof(short)
sizeof(short) <= sizeof(int)
31 <= std::numeric_limits<long>::digits
sizeof(int) <= sizeof(long)
63 <= std::numeric_limits<long long>::digits
sizeof(long) <= sizeof(long long)
sizeof(X) == sizeof(signed X)
sizeof(signed X) == sizeof(unsigned X)
(où "X" est l'un des
char
short
int
long
etlong long
).Cela signifie que la taille de tous types d'entiers peut être la même aussi longtemps que ce types de tenir au moins 64 bits (et apparemment, le Cray X-MP était une bête). Sur les machines contemporaines généralement
sizeof(int) == sizeof(long)
mais il y a des machines oùsizeof(int) == sizeof(short)
. Silong
est 32 ou 64 bits dépend de la véritable architecture et les deux types sont actuellement autour de.plaine
int
est signé, si oui ou non il est de la même taille quelong int
est dépend de la plateforme.Ce qui est garanti, c'est que
et
int
est assez grand pour contenir au moins toutes les valeurs de -32767 à 32767.Ce que dit la norme: (section
[basic.fundamental]
:Plaine
int
est équivalent àsigned int
. C'est la norme. Passés tout ce qui n'est pas garanti;int
etlong
sont de types différents, même si votre compilateur fait la même taille. La seule garantie que vous avez est qu'unlong
est au moins aussi grand qu'uneint
.La
long
etshort
les modificateurs ne sont pas exactement commesigned
etunsigned
. Les deux derniers peuvent être mis sur n'importe quel type entier, mais si vous les laisser hors tension, puissigned
est le par défaut pour chaque type entier (à l'exception dechar
). Doncint
etsigned int
sont du même type.Pour
long
etshort
si vous les laisser hors, ce n'est pas choisie, mais le type est différent.long int
short int
etint
sont tous les différents types, avecshort int
<=int
<=long int
.La
int
aprèslong
short
signed
etunsigned
est facultatif:signed int
etsigned
sont du même type.En C++
int
estsigned int
par défaut, donc il n'y a pas de problème avec ça. Cependant,int
etlong int
sont de types différents, en C++, donc ce n'est pas la même du point de vue de la langue. La mise en œuvre deint
etlong int
de la plate-forme/compilateur spécifique, ils sont partie intégrante de types qui peuvent être identiques. La seule limitation de la norme C++ impose est quesizeof( long int ) >= sizeof( int )
.signed
etint
sont à la fois le même quesigned int
par défaut.Ni est du même type que
signed short int
ousigned long int
.