2012-01-10 14 views
5

32ビットシステム上のCでは、どのデータ型が最大の整数を格納する(したがって印刷することができる)のでしょうか?それはlong longまたはunsigned longですか? unsigned long longはありますか?そして、それは最も正確で政治的に正しいですか? ISO C99 long long整数を格納(および印刷)するための最大データ型は何ですか?

+4

あなたは大きな表示する機能を持つだけで気になる場合は整数値を取得するにはATOI機能を使用します数字、私はchar *に投票します。 :) –

+2

あなたは間違った質問をしているかもしれません。 *あなたはどれくらい行く必要がありますか?* – Jon

+1

はい、C99は 'unsigned long long'プリミティブ型をサポートしていますが、C90はサポートしていません。そして野生のCコンパイラの多くはまだC90なので、答えはノーかもしれません。あなたはどちらを使用していますか興味がありますか? –

答えて

10

あなたの質問は少し不明ですが、intmax_tが最大の符号付き整数値型(uintmax_tは符号なし整数型が最大)です。これらは<stdint.h>で定義されているのtypedefですが、あなたがそれらを印刷している場合は、代わりに<inttypes.h>を必要とし、nはの種々の値に対するPRInMAXマクロ。あなたが最大の符号付き値より1桁長い最大符号なしの値を有する整数型がない限り

+5

そして 'uintmax_t'(実装がそれらをサポートしている場合、それらはC99で追加されました)。 –

+0

'%jd'と'%ju'は 'intmax_t'と' uintmax_t'を印字するためにはうまくいきませんか?出典: - [最新の自由に入手可能なc11ドラフト](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)、 'fprintf'のセクション7.21.6.1を参照してください。 –

1

最大標準整数データ型である、少なくとも64ビットです。それはまたunsigned long longとして来る。どうやら、あなたのコンパイラは、intmax_tuintmax_tで定義されるより大きな型を提供するかもしれません。

しかし、あなたがGMPようBIGINTライブラリを探しているかもしれないあなたのコメントに基づいて。これにより、システムリソースだけで長さが制限された任意の長整数(および浮動小数点)が可能になります。

+4

はい( 'long long'と' unsigned long long'は異なる型です)、実装は 'long long'よりも広い*拡張整数型*を持つことができます。 ''と ''で定義されたtypedefの 'intmax_t'と' uintmax_t'は、拡張型であろうとなかろうと、最大の符号付き型と符号なし型にそれぞれ対応しています。 –

+0

@KeithThompsonありがとうございました。 – ChrisWue

0

最長印刷文字列とデータ型は、署名されたデータ型です。署名された場合

は、例えば、符号無しの4ビット整数は、最大で2つの文字の符号なし又は1つの文字プラスマイナス記号であろう。

したがって、最大の印刷文字列を表す署名付きデータ型を選択する必要があります。どちらがlong longである必要があります。遠回しに言うなし

+0

'int64_t'と' uint64_t'の最長印刷文字列は、それぞれ同じ長さの '-9223372036854775808'と' 18446744073709551615'です。 –

2

私は、我々がこれを行うことができると思いBT、時には実際のコーディングの練習にはいdefintlyいくつかの大会で1は非常に大きなデータ型を必要とするかもしれないではないBTことを言いたいです。なぜ文字列の形で配列全体を取らないし、それは私が:: politcally正しいと思います:)

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int i; 
    char bigString [256]; 

    printf ("Enter a number: "); 
    fgets (bigString, 256, stdin); 

    i = atoi (bigString); 
    printf ("The value entered is %d.",i); 

    return 0; 
} 
+5

変換された値はまだオーバーフローの原因となる整数に格納する必要があります。 – Sinstein

関連する問題