我想使用64位整数可以采用的全范围。我怎么能在x86 Visual Studio 2008中做到这一点?

时间:2013-02-13 16:34:15

标签: c++ c windows visual-studio visual-studio-2008

我在我的解决方案中包含了 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位Windows 7。

4 个答案:

答案 0 :(得分:9)

%u的{​​{1}}格式说明符用于无符号整数。使用printf

虽然这是C ++,但您也可以使用类型安全的%llu来避免程序员错误:

std::cout

答案 1 :(得分:3)

使用:

#include <inttypes.h>

/* ... */

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

打印uint64_t值。

u转化说明符用于打印unsigned int值。

请注意,PRIu64宏是C宏。在C ++中,宏不存在,您可能必须使用%llu转换规范。

答案 2 :(得分:3)

由于您还将其标记为C ++,我将添加明显的方法来避免类型不匹配,例如您遇到printf:使用ostream代替:

std::cout << test2;

答案 3 :(得分:0)

  

在我所拥有的一本书中,它说程序总是转换任何   计算时变量为整数。有可能做到   默认整数64位?

这是1)不正确,2)不,你不能告诉(大多数)编译器你想要的大小int。你当然可以使用类似的东西:

 typedef Int int64_t;
 typedef Uint uint64_t; 

但是你不能将int重命名为编译器应该是什么之外的东西 - 可能是16,32,64,36或72位 - 或者其他一些数字&gt; = 16。