在C++中大于2 ^ 32的整数使用什么类型?

Igo*_*Oks 13 c++ types

我有一个整数变量,可以得到一个大于4294967295的值.

我应该使用什么类型(长,或双,或其他)?

sha*_*oth 14

使用long long并且如果可能的话添加一个编译时断言,这个类型足够宽(像smth一样sizeof( long long ) >= 8).

double 是浮点数,而不是整数.

  • long long不是标准的C++数据类型 (9认同)
  • 根据ISO/IEC 9899:TC3 - 委员会草案 - 2007年9月7日 - 上一版的主要更改包括:long long int类型和库函数最大值为long long int的对象LLONG_MAX 9223372036854775807(2 ^ 63 - 1) (6认同)
  • 那是C99文档,而不是C++. (4认同)

Pod*_*Pod 13

尝试:

http://gmplib.org/ big num.

http://mattmccutchen.net/bigint/ big int.

我没有使用过,但我在Java中使用过类似的东西.


小智 8

在C++中没有可移植的方法,因为该语言没有指定整数类型的大小(除了sizeof char为1).您需要查阅编译器文档.

  • 不完全正确.该标准不指定每种类型的最小幅度和从而暗示最小比特(不是字节)计数看到http://stackoverflow.com/questions/271076/what-is-the-difference-between-an-int-and -a-长在-C/271132#271132 (5认同)

use*_*876 8

我假设您的数字将适合64位.如果没有,那么你需要一个任意精度的算术库,如GMP.

从理论上讲,在C++中进行64位数学运算并不容易.实际上,大多数C++编译器也支持"老式"C头,而C99有一个很好的头文件名为stdint.h.

首先要做的是:

#include <stdint.h>
Run Code Online (Sandbox Code Playgroud)

然后使用类型int64_t(签名)和uint64_t(无符号).