0

私は自分のソリューションにstdint.hを含め、uint64_tを使用しましたが、結果は私が望んでいたものではありませんでした。これが私が使用したコードです。

#include <stdio.h>
#include "./stdint.h"

void    main (void)
{

    //-- to get the maximum value that the 32-bit integer can take
    unsigned int test = 0 ;
    test-- ;

    //-- to see if the 64-bit integer can take the value that the 32-bit integer can't take
    uint64_t test2 = test ;
    test2++ ;

    printf("%u\n", test) ;

    printf("%u\n", test2) ;

    while(1) { }

}

そして、これが結果です。

4294967295
0

64ビット整数がとることができる全範囲を使用したいと思います。x86 Visual Studio 2008でそれを行うにはどうすればよいですか?参考までに、私は32ビットのWindows7を使用しています。

4

4 に答える 4

9

%uフォーマット指定子printfは、符号なし整数用です。を使用し%lluます。

ただし、これはC ++であるstd::coutため、プログラマーのエラーを回避するためにタイプセーフを使用することをお勧めします。

std::cout << test2;
于 2013-02-13T16:35:52.720 に答える
3

これもC++としてタグ付けしているので、次のようなタイプの不一致を回避するための明白な方法を追加します。printf代わりにostreamを使用してください。

std::cout << test2;
于 2013-02-13T16:38:09.567 に答える
3

使用する:

#include <inttypes.h>

/* ... */

printf("%" PRIu64 "\n", test2);

値を出力しuint64_tます。

u変換指定子は、unsigned int値を出力するために使用されます。

PRIu64マクロはCマクロであることに注意してください。C ++ではマクロが存在しないため、%llu変換仕様を使用する必要がある場合があります。

于 2013-02-13T16:36:20.963 に答える
0

私が持っている本では、プログラムは計算時に常に変数を整数に変換すると言っています。デフォルトの整数を64ビットにすることは可能ですか?

これは、1)正しくない、2)いいえ、(ほとんどの)コンパイラに必要なサイズを伝えることはできませintん。もちろん、次のようなものを使用できます。

 typedef Int int64_t;
 typedef Uint uint64_t; 

intただし、コンパイラの本来の名前(16、32、64、36、または72ビット)またはその他の数値>=16以外の名前に変更することはできません。

于 2013-02-13T16:41:15.247 に答える