为什么unsigned long long这种操作总有一点误差

void tranS(unsigned long long num)
{
    char refer[17] = "0123456789ABCDEF";
    char outcome[20];
    int i = 0;
    while (num!=0)
    {
        outcome[i++] = refer[num % 16];
        num/=16;
    }

    for (i -= 1; i >= 0;i--)
    {
        cout << outcome[i];
    }

}


当我传入大一点数如“20041022”,运行出的十六进制数对应十进制"20041023",就差那么一点?

img

不知道你在说什么,20041022的十六进制就是131CD3E啊,有啥不满意的呢?