正确打印出2部分的整数

properly printing out integers from 2 parts

本文关键字:整数 2部 打印      更新时间:2023-10-16

我有一个uint128_t类,它将其值存储为uint64_t UPPER, LOWER;,我不知道如何重载operator<<,这样当我传入std::cout时,值将正确地以十进制打印。目前,我只是做

std::ostream & operator<<(std::ostream & stream, uint128_t const & rhs){
    if (rhs.upper())                  // if the upper value has a non-zero digit
        stream << rhs.upper();
    // i need some way to pad this so that the number of 0s between 
    // upper and lower is correct
    stream << rhs.lower();
    return stream;

我该怎么办?

编辑:

示例:

如果uint128_t变量有UPPER = 1LOWER = 1,我希望流包含(1 << 64) + 1 的十进制值

假设您正确地实现了除法运算符和模运算符,则可以执行以下操作:

std::ostream & operator<<(std::ostream & stream, uint128_t const & rhs){
    if(rhs.upper() == 0)
        return stream << rhs.lower();
    char buffer[50];
    char *cp = buffer + 49;
    *cp = 0;
    while(rhs > 0)
    {
        --cp;
        *cp = (rhs % 10) + '0';
        rhs /= 10;
    }
    return stream << cp;
}