问题描述
我需要在我的代码中使用 128 位 unsigned int 变量。
我在网上搜索unsigned __int128
。
在这里https://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html我读过
类型 __int128 支持整数模式宽度足以容纳 128 位的目标
我的第一个问题是目标是什么意思?我要检查我的电脑是否可以表达这种类型?
第二个问题是如何打印这种变量?
最后我需要做些什么来使用这种变量吗?上面同样的链接说
对于有符号的 128 位整数,只需编写 __int128,对于无符号的 128 位整数,只需编写 __int128。
所以看起来我不需要#include
任何东西,甚至在编译过程中我也没有在gcc
中添加一些选项,对吗?
解决方法
-
“目标”是指您的编译器配置为为其创建程序的 CPU 架构和操作系统的特定组合。 Does a list of all known target triplets in use exist? 有讨论。但是“整数模式”其实是编译器内部使用的一个概念,只与硬件能做什么和不能做什么间接相关。所以这一切真正说的是“编译器在某些目标上支持 128 位整数,而在其他目标上不支持”。确定您的是否正确的最简单方法是尝试编译并运行一个使用
__int128
的小型测试程序。 -
大多数系统的
printf
函数不支持__int128
,因此您必须编写自己的代码来打印它们,或者在某处找到第三方代码。请参阅 How to print __int128 in g++?,它适用于 C++,但仍然相关。 -
您不需要包含任何内容或使用任何特殊选项。