web-dev-qa-db-ja.com

int64_tの定義

私はC/C++が初めてなので、基本的なタイプについていくつか質問があります。

a)int64_tlonglong int)の違いを説明してもらえますか?私の理解では、どちらも64ビット整数です。どちらかを選択する理由はありますか?

b)ウェブでint64_tの定義を検索しようとしましたが、あまり成功しませんでした。そのような質問について相談する必要がある信頼できる情報源はありますか?

c)int64_tを使用してコンパイルするコードの場合、現在<iostream>を含めていますが、これはあまり意味がありません。 int64_tの宣言を提供する他のインクルードはありますか?

62
clstaudt

a)int64_tlonglong 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>(グローバル名前空間)で宣言されます。

83

int64_tは、C99標準によって正確に 64ビット幅であることが保証されています。それを実装するプラットフォームでは、longに対する保証はありません。もっと。

§7.18.1.3正確な幅の整数型1 typedef名intN_tは、幅N、パディングビットなし、2の補数表現を持つ符号付き整数型を指定します。したがって、int8_tは、正確に8ビットの幅を持つ符号付き整数型を示します。

8
iabdalkader

int64_ttypedefで、Cの<stdint.h>にあります

4
Omkant

Int64_tはすべてのプラットフォームで64ビット幅でなければなりません(そのため名前があります)が、longはプラットフォームによって長さが異なる場合があります。特に、sizeof(long)はしばしば4です。 32ビット。

2
Kylotan