C/C++中int128的那点事 |
您所在的位置:网站首页 › int128 › C/C++中int128的那点事 |
最近群友对int128这个东西讨论的热火朝天的。讲道理的话,编译器的gcc是不支持__int128这种数据类型的,比如在codeblocks 16.01/Dev C++是无法编译的,但是提交到大部分OJ上是可以编译且能用的。C/C++标准。IO是不认识__int128这种数据类型的,因此要自己实现IO,其他的运算,与int没有什么不同。 但是官方上写了GCC提供了两种128位整数类型,分别是__int128_t和__uint128_t,分别用于声明有符号整数变量和无符号整数变量。 有关GCC的文档参见:Using the GNU Compiler Collection (GCC)。 这里给出了样例程序,是有关类型__int128_t和__uint128_t的。从计算可以看出,这两个类型都是16字节的,类型__uint128_t是128位的。程序中使用了按位取反运算,移位运算和乘法运算。 由于这种大整数无法使用函数printf()输出其值,所以自己做了一个整数转字符串函数myitoa(),用于实现128位整数的输出。 有兴趣的同学想了解底层实现原理可以参看我的Github上:github.com/AngelKitty/… 代码实现如下: 1 #include 2 3 using namespace std; 4 5 void myitoa(__int128_t v, char* s) 6 { 7 char temp; 8 int i=0, j; 9 10 while(v >0) { 11 s[i++] = v % 10 + '0'; 12 v /= 10; 13 } 14 s[i] = '\0'; 15 16 j=0; 17 i--; 18 while(j < i) { 19 temp = s[j]; 20 s[j] = s[i]; 21 s[i] = temp; 22 j++; 23 i--; 24 } 25 } 26 27 int main() 28 { 29 __uint128_t n = 0; 30 31 n = ~n; 32 int count = 0; 33 while(n > 0) { 34 count++; 35 n >>= 1; 36 } 37 38 cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |