前言:有些题目需要的数值刚好比 long long 的最大值大那么一点点,那么我们就可以用__int128 来搏一搏(并不是所有OJ都支持这个数据类型,受编译标准影响)
最大值是多少
int 最大值:2^(32-1)-1【受电脑字长影响】
long 最大值:2^(32-1)-1【不可改变】
冷知识:int 大小受电脑字长影响,早期电脑通常为16位,那么 int最大值 为:2^(16-1)-1;好一点的电脑为32位,那么 int最大值 为:2^(32-1)-1。
现在最差的电脑也有32位,一般为64位,绝大多数情况默认64位。
即目前 int最大值 皆为2^(32-1)-1,不会更大。
long long 最大值:2^(64-1)-1【不可改变】
__int128 大小:2^(128-1)-1 【不可改变】
关于__int128:只能进行四则运算,不能用cin和cout来输出(本蒟蒻在此不做解释),不能用位运算来定义最大值。
定义最大值 / 最小值
C/C++标准中自带最大值和最小值宏定义(除了__int128,可能有,但是我没找到)
int 最大值宏 INT_MAX
long 最大值宏 LONG_MAX
long long 最大值宏 LONG_LONG_MAX
因为可以四则运算,可以 __int128 MAX = LONG_LONG_MAX * LONG_LONG_MAX 来定义最大值(2个LONG_LONG_MAX相乘最高位2^126,__int128最大值最高位2^127-1,不会溢出)
最小值就是最大值取个反,怕溢出的可以少算一点,比如 10 * LONG_LONG_MIN。
__int128的输入和输出
输入可以用string来读取,然后按位把值算进去
输出要手写,如下示例
#include <bits/stdc++.h>
using namespace std;
using maxType=__int128;
maxType a = (maxType)LONG_LONG_MAX*LONG_MAX;
void print(maxType x){
stack<int>o;
while(x)o.push(x%10),x/=10;
while(!o.empty())cout<<o.top(),o.pop();
cout<<endl;
}
int main(){
cout<<"LONG_LONG_MAX:";
print(LONG_LONG_MAX);
cout<<"maxType:";
print(a);
return 0;
}
可能会用到的该知识点的题:[传智杯 #5 初赛] E-梅莉的市场经济学 - 洛谷文章来源:https://www.toymoban.com/news/detail-617568.html
参考博文:详解__int128 - FReQuenter - 博客园(更具体,包含什么时候可以使用__int128)(看什么看,不如直接搏一搏)文章来源地址https://www.toymoban.com/news/detail-617568.html
到了这里,关于详解__int128,最大可用整数类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!