Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;可以存储2^63吗?_C++ - Fatal编程技术网

C++ c++;可以存储2^63吗?

C++ c++;可以存储2^63吗?,c++,C++,我需要在我的程序中存储2^63个自然数。Int有4个字节:所以它是2^(8*4)=2^32,我应该使用哪种类型?在大多数现代处理器上,一个长Int。从技术上讲,这是C99/C++ 11的新技术,但大多数C++编译器都支持自从99年以来。 常量的形式是0LL您可以使用unsigned long-long,但我会检查您的编译器是否支持该类型 #include <iostream> int main() { std::cout<<sizeof(unsigned long

我需要在我的程序中存储2^63个自然数。Int有4个字节:所以它是2^(8*4)=2^32,我应该使用哪种类型?

在大多数现代处理器上,一个
长Int
。从技术上讲,这是C99/C++ 11的新技术,但大多数C++编译器都支持自从99年以来。
常量的形式是
0LL

您可以使用
unsigned long-long
,但我会检查您的编译器是否支持该类型

#include <iostream>
int main()
{
    std::cout<<sizeof(unsigned long long)<< " bytes" << std::endl;
    return 0;
}
#包括
int main()
{

Std::CUT< P>这是依赖于体系结构的。C++没有C的代码>代码> ST>。 我认为C++11添加了
cstdint
作为
stdint.h
的包装。然后您可以使用
int64\u t

编辑:正如johannes指出的那样,
long
在Windows中是32位的。我不确定这在C++03中是否可以在保持完全符合标准的情况下进行移植。
long
int64_t
不是C++03标准的一部分,而是由普通编译器作为编译器扩展提供的。

您可以使用

它还有一个

注:

GMP中的C++支持可以通过
--enable cxx'启用,在这种情况下
将需要C++编译器。作为一个方便的< /COD> >启用CXX=检测
只有在找到编译器时才能使用C++支持。
C++支持由一个库LBGMPXX.LA和头文件GMPX.H组成。
(请参见标题和库)


\uu int64
long
经常使用,但不是STL的一部分。 如果不支持
\uuu int64
,C的
long
将与GCC一起使用。
在C99中,如果您需要正好64位,您可以使用
int64\t
,从

查看
*\u MAX
中为编译器定义的
limits.h
常量。如果其中任何一个大于等于2^63,请使用该常量对应的类型。对于我的编译器,
ULLONG\u MAX
0xffffffffffffffffffffffff64
18446744073709551615
,这是>=
9223372036854775808
(2^63)。因此,我会使用
无符号long-long
作为将自然数保存到2^63的类型。

我不知道这是否有用,但double能够准确地表示pow(2,63)值(没有错误)。但是,它不能表示pow(2,63)正是+1.0,也不能表示pow(2,63)-1.0,所以这可能不是一个有用的答案


因此,如果您确实需要它的整数表示,那么需要使用无符号64位整数类型(有符号类型是不够的,因为(1我建议使用大整数库)

这是一个有效的公共域:

\include
使用名称空间std;
int main()
{
无符号长结果=1;

对于(int i=1;i什么平台?有符号还是无符号?您可能有'long long'或'int64_t'。请检查此项。不,您没有。如果是这样,请告诉我为什么?请注意,int不能保证为4字节…它只是我能想到的每一个现代桌面。所有整数类型都可以存储
2^63
(等于61):p.我认为ll后缀不区分大小写。我从来不知道。还更改了常量。Point也会使用较小的数字。win64上的long是32位。Unix/Linux上的long是64位。编写可移植代码时的一个烦恼。正如其他人提到的long long,如果支持的话,这是最好的方法。(C++11中新增)你的意思是
long-long
。在Windows上,
long
在Windows中是32位。更正。我应该停止对Windows进行假设,因为它似乎总是违背我的期望。@OscarKorz,这就是限制的原因。h公开
long_MAX
ULONG_MAX
,这样你可以验证你的假设。请添加一些解释我在上面写的一个小程序,它可以存储(2^64)-1个十进制数,也就是18446744073709551615,它在2^63以上。
#include <iostream>
using namespace std;

int main()
{
    unsigned long long result = 1;

    for(int i = 1; i <= 64; i++){
        if(i == 64){
            result = ((result * 2)-1);
        }
        else{
            result = ((result * 2));
        }


    }

    cout << "result is : " << result << endl;

    return 0;
}