1

我有一个功能foo(unsigned __int128)。如何将类型的文字传递unsigned __int128给函数?我的尝试:

   foo(0xFFFFFFFFFFFFFF23FFFFF); //Truncated (expected)
   foo(0xFFFFFFFFFFFFFFF01FFFu); //Truncated (expected)
   foo(0xFFFFFFFFFFFFFFF23FFFFull); //Truncated
   foo((unsigned __int128)0xFF45FFFFFFFFFFFFFFFFFull); //Truncated

如您所见,它们都被截断了。我如何向 GCC 发出信号,表明文字是unsigned __int128?

编辑: gcc 手册说:

GCC 不支持为具有小于 128 位宽的 long long 整数的目标表示 __int128 类型的整数常量

这是否意味着我不能编写(无符号)__int128 类型的文字?

有替代品吗?

4

1 回答 1

2

来自https://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html

6.9 128 位整数

作为扩展,整数标量类型 __int128 支持具有足够宽以容纳 128 位的整数模式的目标。只需将 __int128 用于有符号 128 位整数,或将无符号 __int128 用于无符号 128 位整数。GCC 不支持为具有小于 128 位宽的 long long 整数的目标表示 __int128 类型的整数常量。

所以,不,你不能有一个文字 128 位常量

于 2020-08-09T18:58:17.170 回答