23

long long から int に変換し、C++ で逆に変換する方法は?? また、 long long のプロパティ、特にその最大サイズについては、事前に感謝します..

4

3 に答える 3

29

int少なくとも 16 ビット幅であることが保証されています。最新のシステムでは、最も一般的には 32 ビットです (64 ビット システムでも)。

long longは元々 C++ には存在しませんでしたが、少なくとも 64 ビット幅であることが保証されています。ほとんどの場合、正確に64 ビット幅です。

ある整数型から別の整数型に値を変換する通常の方法は、単純に代入することです。必要な変換は暗黙的に行われます。例えば:

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

ターゲット型がソース型のすべての値を表すことができない縮小変換の場合、オーバーフローのリスクがあります。int値を保持できる場合と保持できない場合があります9223372036854775807。この場合、結果は実装定義です。最も可能性の高い動作は、上位ビットが破棄されることです。たとえば、 に変換する9223372036854775807と、intが得られる可能性があり2147483647ます。(これは 16 進数の方が明確です。値はそれぞれ0x7fffffffffffffff0x7fffffffです。)

明示的に変換する必要がある場合は、キャストを使用できます。C スタイルのキャストでは、括弧内に型名を使用します。

(long long)x

または、C++ スタイルを使用できますstatic_cast

static_cast<long long>(x)

これは、操作できる型が制限されているため、C スタイルのキャストよりもいくらか安全です。

于 2015-01-23T02:02:51.953 に答える
18

タイプlonglongは通常64ビットです。

タイプintは32ビットである可能性がありますが、すべてのマシンであるとは限りません。

intをlonglongにキャストすると、次のことができます。

my_long_long = (long long) my_int

そしてそれは大丈夫でしょう。あなたが反対方向に行くなら、

my_int = (int) my_long_long

また、intが64ビットよりも小さい場合、すべての情報を保持できないため、結果が正しくない可能性があります。

于 2012-08-20T01:50:54.427 に答える
3

intのサイズはわずか2バイトですが、もう1つは通常intよりも大きくなります。したがって、longをintに変換しようとしている場合は、情報が失われることになります。しかし、情報の正確さを犠牲にすることなく、他の方法も可能です。がlonga型でb、int型であるとします。a=(long)b;次に、長い隠蔽にint:。他の方法の場合:b=(int)a;

于 2012-08-20T01:34:08.933 に答える