- ベストアンサー
intとlongは同じ?
#include <stdio.h> #include <limits.h> int main() { printf("%d\n%d", INT_MAX, LONG_MAX); return 0; } 出力 214783647 214783647 Win7 64bit (VC++2010) CentOS 32bit (gcc) どちらの環境でも同じ出力結果となりました。 intとlongなぜ同じになってしまったのでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
long は 32ビットの整数(signedの場合 -2147483648~+2147483647、unsignedの場合 0~4294967295) int は システムにおける 標準 という定義です。 32ビットシステムの場合は同じになります。 DOS時代はシステムが 16ビットのため、intは -32768~+32767(または 0~65535)でした。 short int とすることで 16ビット互換となります。
その他の回答 (4)
- wormhole
- ベストアンサー率28% (1626/5665)
>64bit CPU / 64bit OSでもintは32bitが上限なのでしょうか。 過去、intは32bitとして扱うことが多かったので 互換性のために32bitにしてると思われます。 >今後128bit OSや128bit CPUが出てきた時もintは32bitが上限となるのでしょうか。 将来どのようになるかなんてわかりません。
お礼
スッキリしたのと同時に深い理解を得る事ができました。 ありがとうございました。
- wormhole
- ベストアンサー率28% (1626/5665)
たまたま両者がそういう環境だったから。 int: 少なくとも-32767~32767の整数が扱える。 long: 少なくとも-2147483647~2147483647の整数が扱える。 扱える値の範囲が long >= int 上記の条件さえみたせばC(C99)としては問題ありませんので。 ちなみにLONG_MAXを出力するなら >printf("%d\n%d", INT_MAX, LONG_MAX); のフォーマットは不適切です。
補足
> ちなみにLONG_MAXを出力するなら > >printf("%d\n%d", INT_MAX, LONG_MAX); > のフォーマットは不適切です。 たしかにその通りです。 printf("%d\n%ld", INT_MAX, LONG_MAX); とすべきでした。
- tsunji
- ベストアンサー率20% (196/958)
int型はコンパイラによって、ビット長が変わります。 基本的にCPUのビット数がint型のビット長となります。 16ビット以下のシステムでは、int型は暗黙の了解で16ビットとなるものが多いです。 16ビット型の整数として使いたい場合は、short型を使用してください。 int型のサイズが知りたい場合は、INT_MAXを使うか、sizeof関数を使用してください。
補足
> 基本的にCPUのビット数がint型のビット長となります。 No.1 / No.2 さんへの補足と被りますが、 64bit CPUであれば64bit = 8バイト 128bit CPUであれば128bit = 16バイト となるのでしょうか。
- koujikuu
- ベストアンサー率43% (429/993)
int は、そのCPUに適したサイズになります、8ビットのCPU なら1バイト 16ビットのCPUなら2バイト 32ビットのCPUなら4バイト 32bit の gcc なので4バイトになったと思われます。
補足
No.1さんへの補足とほぼ被りますが、 64bit CPUであれば64bit = 8バイト 128bit CPUであれば128bit = 16バイト となるのでしょうか。
補足
なるほど。 CPUのbit数に依存するのですか。 しかし、新たに疑問が生まれてしましました。 > 32ビットシステムの場合は同じになります。 CPU は i7 2600K OS は Win7 64bit を利用しています。 Intel® CoreTM i7-2600K Processor (8M Cache, up to 3.80 GHz) http://ark.intel.com/products/52214/Intel-Core-i7-2600K-Processor-(8M-Cache-3_40-GHz) ここを見るかぎり64bitCPUなので、 intは64bit分となると思いました。 しかし、VC++ 2010コンパイラでx64としてコンパイルしても intは64bit分(8バイト分)とらず、 2147483647 2147483647 と出力されました。 なぜなのでしょうか。 64bit CPU / 64bit OSでもintは32bitが上限なのでしょうか。 今後128bit OSや128bit CPUが出てきた時もintは32bitが上限となるのでしょうか。