关于__int128 和 short,你需要知道的一切
高精度大家都认识吧?
但是,高精度这货是真滴长……
于是,人们又发明出了一个东西 __int128!
__int128(注意前面有 2 个下划线)嘛,把特点写脸上了:占用 128 位,也就是 16 个字节。储存范围,自然也是占用 64 位的 long long 的 2 倍。换算一下,能存三十多近四十位。基本上可以代替部分高精度了。
那__int128 这么 NB,咋就不能被广泛使用呢(好多教材没教这个对不)?
因为它缺陷也很多:
- 不通用。__int128 并没有在任何一个 C 艹标准中严格定义 ,所以目前它只是 GCC 系列编译器的专属(NOI Linux 恰好也用的是 GCC,所以__int128 可用。然鹅,使用 Visual Studio 的同志们,你们用的编译器一般是 MSVC,是不支持的。)。
- 不方便。__int128 目前看来是不支持直接读入、输出的。管你是 cin、cout、scanf 还是 printf,都甭想输入一个__int128 类型的数据。于是它需要通过快读(快写)来读入 / 输出。
- 空间大,速度慢。 __int128 占用了 16 个字节来存,MLE 的风险显著增加。空间大速度还慢。你想啊,人家 int 才 32 位,64 位的 CPU 一次处理俩;你 128 位,64 位的 CPU 两次处理 1 个,不得慢死(TLE 风险增加)……
不过,为了让大家多掌握(pian)亿点东(fen)西,下面给出使用__int128 时的基本框架。
1 |
|
说了这么半天慢的太吓人的__int128,那有木有一个特快的,比如说 16 位 2 个字节的哪种?
还真有,而且这个槽点就没那么多了。它就是 ——short!
short 这玩意儿可比__int128 强多了。它是通用的,也是可以直接读入、输出的(scanf 和 printf 统一用 “% hd”)。
那为啥它用的也不多呢?
因为它太省内存了,你说它就
- 标题: 关于__int128 和 short,你需要知道的一切
- 作者: Leo2011
- 创建于 : 2023-11-25 14:34:49
- 更新于 : 2024-12-22 19:58:49
- 链接: 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 进行许可。
推荐阅读
评论