web-dev-qa-db-fra.com

convertir de long long en int et inversement en c ++

Comment convertir de long long en int et inversement en c ++ ?? aussi quelles sont les propriétés de long long, surtout sa taille maximale, merci d'avance ..

17
Loers Antario

Le type long long est généralement de 64 bits.

Le type int est probablement 32 bits, mais pas sur toutes les machines.

Si vous lancez un int sur un long long, vous pouvez le faire

my_long_long = (long long) my_int

et ce sera très bien. Si vous allez dans l'autre sens, comme

my_int = (int) my_long_long

et l'int est inférieur à 64 bits, il ne pourra pas contenir toutes les informations, donc le résultat peut ne pas être correct.

14
David

int est garanti sur une largeur d'au moins 16 bits. Sur les systèmes modernes, il s'agit le plus souvent de 32 bits (même sur les systèmes 64 bits).

long long, qui n'existait pas à l'origine en C++, a une largeur d'au moins 64 bits. C'est presque toujours exactement 64 bits de large.

La manière habituelle de convertir une valeur d'un type entier à un autre est simplement de l'affecter. Toute conversion nécessaire se fera implicitement. Par exemple:

int x = 42;
long long y = 9223372036854775807;
y = x; // implicitly converts from int to long long
x = y; // implicitly converts from long long to int

Pour une conversion restreinte, où le type cible ne peut pas représenter toutes les valeurs du type source, il existe un risque de débordement; int peut ou ne peut pas contenir la valeur 9223372036854775807. Dans ce cas, le résultat est défini par l'implémentation. Le comportement le plus probable est que les bits de poids fort sont ignorés; par exemple, la conversion de 9223372036854775807 à int pourrait donner 2147483647. (C'est plus clair en hexadécimal; les valeurs sont 0x7fffffffffffffff et 0x7fffffff, respectivement.)

Si vous devez effectuer une conversion explicite, vous pouvez utiliser un cast. Une conversion de style C utilise le nom du type entre parenthèses:

(long long)x

Ou vous pouvez utiliser un style C++ static_cast:

static_cast<long long>(x)

ce qui est un peu plus sûr qu'un casting de style C car il est limité dans les types sur lesquels il peut fonctionner.

16
Keith Thompson

La taille de int n'est que de 2 octets alors que l'autre est généralement plus grande que int. Donc, si vous cherchez à convertir long en int, vous finirez par perdre des informations. Mais l'autre voie est possible sans sacrifier l'exactitude des informations. Supposons que a est de type long et b est de type int. Puis int à la longue conversion: a=(long)b;. Pour l'autre manière: b=(int)a;.

3
ASHUTOSH