为什么以 10 为底的 -9 等于以 17 为底的 a7ffda89?

Why is -9 base 10 equal to a7ffda89 in base 17?

使用 Microsoft 的 itoa 实现,如何将 "a7ffda89" 作为基数 10 中 -9 的基数 17 表示?我要找的是算法的描述。

这是我用来找出 itoa 使用 Microsoft 的实现会 return 的代码:

#include "stdafx.h"  
#include <stdlib.h>

int main(int argc, char *argv[])
{
  (void)argc;
  (void)argv;
  char buff[256] = {};
  memset(buff, '0', 256);
  _itoa_s(-9, buff, 256, 17);
  exit(0);
}

-9 表示为 无符号 32 位整数 是 4294967287。将 that 转换为基数 17 得到 a7ffda89。作为检查,在 Python:

>>> int('a7ffda89', 17) - (1<<32)
-9

来自cplusplus.com

If base is 10 and value is negative, the resulting string is preceded with a minus sign (-). With any other base, value is always considered unsigned.