SkyWT / 博客 / C++中的128位整型 __int128

C++中的128位整型 __int128

2018 年 7 月 11 日 07:06
共 2 条评论


文章目录

C++里有普通的 32 位整数类型 int 和 64 位整数类型 long long,但是如果我们要存一个128位的整数,前两个似乎就无能为力了。这时候我们就要用到 __int128这种类型了。

大小

32 位整数 int 类型的范围是 -2147483648 到 2147483647,也就是 231-2^{31}23112^{31}-1

64 位整数 long long 类型范围是 263-2^{63}26312^{63}-1

那么 __iint128 类型的范围当然就是 2127-2^{127}212712^{127}-1。当然这是个很大的数字了。
(我依稀记得,在 Pascal 下 128 位整数(不带符号)是qword……)

定义

对__int128 类型变量的定义与普通类型没有差别:

const __int128 x=312473910479474312;
__int128 a,b;

读入与输出

默认的 cin 和 cout 都是没法读入或者输出 __int128 类型的,都会报错。printf 里面似乎也没有 __int128 类型对应的编码,那么怎么办呢?最好的方法是自己写输出函数:

inline void write(__int128 x){
    if(x>9) write(x/10);
    putchar(x%10+'0');
}

用递归的方式,不需要另开空间存,很方便。

关于编译错误

据说在许多版本 gcc/g++ 里直接开 __int128 会编译错误(但是我在 Linux 下并没有遇到),但是在各大 OJ 的评测机上是不会出问题的。可以用洛谷的在线 IDE 尝试编译。


暂无评论


发表新的评论

所有评论都将经过博主审核。请勿填写无意义邮箱或发表无关评论、广告等,否则会被视为垃圾评论。

提交评论即表明你同意本网站使用 Cookie,并允许本站在后台记录你的邮箱、IP 地址等必要信息。这些信息不会被透露给其他用户。(提交一次评论后,本提示将不再展示)