- 注册时间
- 2007-12-28
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 12734
- 在线时间
- 小时
|
发表于 2020-5-13 11:10:03
|
显示全部楼层
如果使用在Linux下编程是可以直接使用128位整数类型的.
- #include <stdint.h>
- #include <stdio.h>
- #include <inttypes.h>
- typedef unsigned __int128 uint128_t;
- uint128_t mul64(uint64_t a, uint64_t b) {
- return (uint128_t)a * b;
- }
- // 下面的print_u128_u 代码来自
- // https://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc
- /* UINT64_MAX 18446744073709551615ULL */
- #define P10_UINT64 10000000000000000000ULL /* 19 zeroes */
- #define E10_UINT64 19
- #define STRINGIZER(x) # x
- #define TO_STRING(x) STRINGIZER(x)
- static int print_u128_u(uint128_t u128)
- {
- int rc;
- if (u128 > UINT64_MAX)
- {
- uint128_t leading = u128 / P10_UINT64;
- uint64_t trailing = u128 % P10_UINT64;
- rc = print_u128_u(leading);
- rc += printf("%." TO_STRING(E10_UINT64) PRIu64, trailing);
- }
- else
- {
- uint64_t u64 = u128;
- rc = printf("%" PRIu64, u64);
- }
- return rc;
- }
- int main()
- {
- uint128_t c;
- uint64_t a=10000000000;
- uint64_t b=10000000000;
- c=mul64(a,b);
-
- int ndigits = print_u128_u(c);
- printf("\n%d digits\n", ndigits);
- return 0;
- }
复制代码 |
|