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 <iostream>
using namespace std;
int main(void){
        __int128 a;
        return 0;
}
测试代码2#include <iostream>
using namespace std;
int main(void){
        __int128_t a;
        return 0;
}
测试代码3#include <iostream>
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 <bits/stdc++.h>
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<<endl;
    return 0;
}

输入输出如下:

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

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Java语言的语法机制与C和C++在某些方面有相似之处,但也存在一些明显的不同,主要表现在以下几个方面: 1. 数据类型:Java语言中的数据类型是严格定义的,与C/C++不同,Java没有指针类型。Java中的基本数据类型包括byte、short、int、long、float、double、char、boolean等,而C/C++中还有unsigned、signed等数据类型。 2. 内存管理:Java语言中的内存管理由垃圾回收器负责,程序员无需手动管理内存,而C/C++需要程序员手动进行内存分配和释放。 3. 异常处理:Java语言中有异常处理机制,可以让程序员在代码中捕获和处理异常,而C/C++中没有异常处理机制,通常使用返回值或全局变量表示函数的执行状态。 4. 类和对象:Java是一种面向对象的语言,类和对象是Java程序的基本组成部分,而C/C++是一种面向过程的语言,类和对象不是必须的。 5. 继承和多态:Java支持类的继承和多态,可以方便地实现代码的复用和扩展,而C++也支持类的继承和多态,但C语言不支持。 6. 接口:Java中有接口的概念,可以定义一组方法的规范,实现类必须实现这些方法,而C/C++没有接口的概念。 7. 包(Package):Java中有包的概念,可以将类组织成逻辑上的模块,方便代码的管理和重用,而C/C++没有包的概念。 总之,Java语言的语法机制与C/C++有些相似之处,但在数据类型、内存管理、异常处理、类和对象、继承和多态、接口、包等方面都有一些明显的不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值