C++ 关于int128在何种环境下能够使用

今天看到有int128这种神奇的大整数类型,“可能“让我们的大整数相加变得简单些,但是自己用gcc编译了一下,失败了。不死心VS2017也失败了,网上说,只有在某些情况能够使用。做了个测试,发现只有在Linux环境下能够使用

下面是我搜集的资料和做的实验,记录一下:

C99官方文档:(511页)

J.5.6 Other arithmetic types
Additional arithmetic types, such as __int128 or double double, and their
appropriate conversions are defined (6.2.5, 6.3.1). Additional floating types may have
more range or precision than long double, may be used for evaluating expressions of
other floating types, and may be used to define float_t or double_t.

C11官方文档:(580页)

J.5.6 Other arithmetic types
Additional arithmetic types, such as __int128 or double double, and their
appropriate conversions are defined (6.2.5, 6.3.1). Additional floating types may have
more range or precision than long double, may be used for evaluating expressions of
other floating types, and may be used to define float_t or double_t. Additional
floating types may also have less range or precision than float.

两段一模一样,大概意思是C标准中未对__int128这个类型做准确的定义,只是留有这样的一个定义,具体实现由编译器构成。
也就是说,这个类型能不能使用完全取决于你使用的编译器是什么。反正我C标准没由具体实现。
那么我对三段测试代码做了如下实验:

测试代码1#include 
using namespace std;
int main(void){
        __int128 a;
        return 0;
}
测试代码2#include 
using namespace std;
int main(void){
        __int128_t a;
        return 0;
}
测试代码3#include 
using namespace std;
int main(void){
        __uint128_t a;
        return 0;
}

Ubuntu18.04:

gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0

测试代码1或2或3:

g++ -o test test.cpp 编译成功
g++ -o test test.cpp -std=c++11编译成功

Windows 10:

gcc (MinGW.org GCC-6.3.0-1) 6.3.0

测试代码1或2或3:

g++ -o test test.cpp 编译失败
g++ -o test test.cpp -std=c++11编译失败

看来我们只能在Linux环境下使用__int128了。

但是cincout都无法输出__int128的,我们需要自己写个读入输出,下面我贴个模板:

#include 
using namespace std;
inline __int128 read(){
    __int128 x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}

inline void print(__int128 x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9)
        print(x/10);
    putchar(x%10+'0');
}

int main(void){
    __int128 a = read();
    __int128 b = read();
    print(a + b);
    cout<return 0;
}

输入输出如下:

root@ubuntu:~# g++ test.cpp -o test
root@ubuntu:~# ./test
1 2
3

你可能感兴趣的:(C++)