私はC/C++が初めてなので、基本的なタイプについていくつか質問があります。
a)int64_t
とlong
(long int
)の違いを説明してもらえますか?私の理解では、どちらも64ビット整数です。どちらかを選択する理由はありますか?
b)ウェブでint64_t
の定義を検索しようとしましたが、あまり成功しませんでした。そのような質問について相談する必要がある信頼できる情報源はありますか?
c)int64_t
を使用してコンパイルするコードの場合、現在<iostream>
を含めていますが、これはあまり意味がありません。 int64_t
の宣言を提供する他のインクルードはありますか?
a)
int64_t
とlong
(long int
)の違いを説明してもらえますか?私の理解では、どちらも64ビット整数です。どちらかを選択する理由はありますか?
前者はexactly 64ビットの符号付き整数型です。後者は、少なくとも 32ビットの符号付き整数型です。
b)ウェブで
int64_t
の定義を検索しようとしましたが、あまり成功しませんでした。そのような質問について相談する必要がある信頼できる情報源はありますか?
http://cppreference.com はここでこれをカバーします: http://en.cppreference.com/w/cpp/types/integer 。しかし、信頼できるソースは C++標準 です(この特定のビットは§18.4整数型[cstdint]にあります)。
c)
int64_t
を使用してコンパイルするコードには、<iostream>
を含めていますが、これはあまり意味がありません。int64_t
の宣言を提供する他のインクルードはありますか?
<cstdint>
または<cinttypes>
(名前空間std
の下)、または<stdint.h>
または<inttypes.h>
(グローバル名前空間)で宣言されます。
int64_t
は、C99標準によって正確に 64ビット幅であることが保証されています。それを実装するプラットフォームでは、long
に対する保証はありません。もっと。
§7.18.1.3正確な幅の整数型1 typedef名intN_tは、幅N、パディングビットなし、2の補数表現を持つ符号付き整数型を指定します。したがって、int8_tは、正確に8ビットの幅を持つ符号付き整数型を示します。
int64_t
はtypedef
で、Cの<stdint.h>
にあります
Int64_tはすべてのプラットフォームで64ビット幅でなければなりません(そのため名前があります)が、longはプラットフォームによって長さが異なる場合があります。特に、sizeof(long)はしばしば4です。 32ビット。