long long から int に変換し、C++ で逆に変換する方法は?? また、 long long のプロパティ、特にその最大サイズについては、事前に感謝します..
3 に答える
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 進数の方が明確です。値はそれぞれ0x7fffffffffffffff
と0x7fffffff
です。)
明示的に変換する必要がある場合は、キャストを使用できます。C スタイルのキャストでは、括弧内に型名を使用します。
(long long)x
または、C++ スタイルを使用できますstatic_cast
。
static_cast<long long>(x)
これは、操作できる型が制限されているため、C スタイルのキャストよりもいくらか安全です。
タイプlonglongは通常64ビットです。
タイプintは32ビットである可能性がありますが、すべてのマシンであるとは限りません。
intをlonglongにキャストすると、次のことができます。
my_long_long = (long long) my_int
そしてそれは大丈夫でしょう。あなたが反対方向に行くなら、
my_int = (int) my_long_long
また、intが64ビットよりも小さい場合、すべての情報を保持できないため、結果が正しくない可能性があります。
intのサイズはわずか2バイトですが、もう1つは通常intよりも大きくなります。したがって、longをintに変換しようとしている場合は、情報が失われることになります。しかし、情報の正確さを犠牲にすることなく、他の方法も可能です。がlonga
型でb
、int型であるとします。a=(long)b;
次に、長い隠蔽にint:。他の方法の場合:b=(int)a;
。