关于__int128 和 short,你需要知道的一切

Leo2011 警示后人

高精度大家都认识吧?

但是,高精度这货是真滴长……

于是,人们又发明出了一个东西 __int128!

__int128(注意前面有 2 个下划线)嘛,把特点写脸上了:占用 128 位,也就是 16 个字节。储存范围,自然也是占用 64 位的 long long 的 2 倍。换算一下,能存三十多近四十位。基本上可以代替部分高精度了。

那__int128 这么 NB,咋就不能被广泛使用呢(好多教材没教这个对不)?

因为它缺陷也很多:

  1. 不通用。__int128 并没有在任何一个 C 艹标准中严格定义 ,所以目前它的支持情况看编译器,不过好消息是一般 GCC(包括 NOI Linux 的那个古董)在内都是支持的)。
  2. 不方便。__int128 目前看来是不支持直接读入、输出的。管你是 cin、cout、scanf 还是 printf,都甭想输入一个__int128 类型的数据。于是它需要通过快读(快写)来读入 / 输出。
  3. 空间大,速度慢。 __int128 占用了 16 个字节来存,MLE 的风险显著增加。空间大速度还慢。你想啊,人家 int 才 32 位,64 位的 CPU 一次处理俩;你 128 位,64 位的 CPU 两次处理 1 个,不得慢死(TLE 风险增加)…… 当然啦,这货肯定比高精度快得多。

不过,为了让大家多掌握(pian)亿点东(fen)西,下面给出使用__int128 时的基本框架。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <bits/stdc++.h>

#define log printf

using namespace std;

__int128 n;

__int128 reader() {
__int128 x = 0; // 虽然限制那么多,但咱赋个值总还是可以的吧……
int w = 0;
char ch;
while (!isdigit(ch)) {
w |= ch == '-'; ch = getchar();
}
while (isdigit(ch))
x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
return w ? -x : x;
}

void output(__int128 x) {
if (x < 0) {
putchar('-');
x *= -1;
}
if (x > 9)
output(x / 10);
putchar(x % 10 + '0'); // 众所周知这货只能搞四则运算,输出还请数位分解一下(其实就是快读快写)
}

int main() { // 你变量全用__int128我也不拦着你,但永远记住main函数不开int(好吧用signed也行,因为这货本来就是signed int)会CE的哈
n = reader();
// 请自行操作
output(n);
return 0;
}

说了这么半天慢的太吓人的__int128,那有木有一个特快的,比如说 16 位 2 个字节的哪种? 还真有,而且这个槽点就没那么多了。它就是 ——short!

short 这玩意儿可比__int128 强多了。它是通用的,也是可以直接读入、输出的(scanf 和 printf 统一用 “% hd”)。

那为啥它用的也不多呢?

因为它太省内存了,你说它就 (,绝对值不超过 万)的存储范围能存个啥?

  • 标题: 关于__int128 和 short,你需要知道的一切
  • 作者: Leo2011
  • 创建于 : 2023-11-25 14:34:49
  • 更新于 : 2025-05-31 21:12:04
  • 链接: https://www.leo2011.eu.org/2023/11/25/guan-yu-int128-he-short-ni-xu-yao-zhi-dao-de-yi-qie/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
Nickname
Email
Website
  • OωO
  • |´・ω・) ノ
  • ヾ (≧∇≦*) ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ °ο°) ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ (´・ ・`。) ノ "
  • (ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;) っ
  • (,,´・ω・)ノ"(´ っ ω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • 😂
  • 😀
  • 😅
  • 😊
  • 🙂
  • 🙃
  • 😌
  • 😍
  • 😘
  • 😜
  • 😝
  • 😏
  • 😒
  • 🙄
  • 😳
  • 😡
  • 😔
  • 😫
  • 😱
  • 😭
  • 💩
  • 👻
  • 🙌
  • 🖕
  • 👍
  • 👫
  • 👬
  • 👭
  • 🌚
  • 🌝
  • 🙈
  • 💊
  • 😶
  • 🙏
  • 🍦
  • 🍉
  • 😣
  • 颜文字
  • Emoji
  • Bilibili
0 comments
No comment