Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从结构打印int128值_C - Fatal编程技术网

C 从结构打印int128值

C 从结构打印int128值,c,C,我有一个int128,它是由2个64位整数组成的元组: struct int128 { uint64_t left; int64_t right; }; 我知道如何做乘法、加法和减法等基本算术,但我不知道如何用C打印当前有符号值 有人能告诉我怎么做吗?假设您有以下功能: int64_t divideRem(struct int128 *number, int64_t divisor); 对数字/除数进行除法,将除法结果设置为number,并返回除法的剩余部分

我有一个int128,它是由2个64位整数组成的元组:

struct int128 {

    uint64_t    left;
    int64_t     right;
};
我知道如何做乘法、加法和减法等基本算术,但我不知道如何用C打印当前有符号值


有人能告诉我怎么做吗?

假设您有以下功能:

int64_t divideRem(struct int128 *number, int64_t divisor);
对数字/除数进行除法,将除法结果设置为number,并返回除法的剩余部分

您可以使用递归实现:

printInt128rec(struct int128 *number) {
  int64_t rem;
  rem = divideRem(number, 10);
  if( cmpInt128(number, 0) != 0 ) { /* compares number with 0 */
    printInt128rec(number);
  }
  printf("%d", rem);
}
您的主要打印功能应复制号码以避免修改,并检查底片:

printInt128(struct int128 *number) {
  struct int128 copy = *number;
  if( cmpInt128(&copy, 0) < 0 ) {  /* number is negative */
    printf("-");
    becomePositive(&copy); /* copy = abs (number ) */
  }
  printInt128rec(&copy);
}
printInt128(结构int128*编号){
struct int128 copy=*编号;
如果(cmpInt128(©,0)<0){/*数字为负数*/
printf(“-”);
变为阳性(©);/*copy=abs(数字)*/
}
printInt128rec(复制和打印);
}

现在您可以调用printInt128打印您的号码。请注意,我使用了其他几个在int128整数和int64之间操作的函数。如果你知道如何制作128位算术,那么这些应该更容易实现。

你不能用一个库来实现吗?我猜你需要编写一系列函数来实现这一点。我想学习如何做到这一点。你如何在不使用
printf()
族的情况下打印
int
值?谢谢在看到你的帖子之前我也这么做了。很高兴您的解决方案确认我做了正确的事情:)-再次感谢您!