为什么该算法会将十进制数转换为十六进制数?

Why does this algorithm convert decimal to hexadecimal numbers?

我不太明白这种算法是如何工作的...

代码:

#include <stdio.h>

int main(void){


int number = 0;

while(number < 16){

  if(number < 10){
    printf("decimal: \t%d\n", number);
    printf("hexadec.: \t%c\n", number  + '0');
  }else{
    printf("decimal: \t%d\n", number);
    printf("hexadec.: \t%c\n", number  - 10 + 'A');
  }
  
  printf("\n");
  number++;
  }

  return 1;
}

输出:

decimal:    0
hexadec.:   0

decimal:    1
hexadec.:   1

decimal:    2
hexadec.:   2

decimal:    3
hexadec.:   3

decimal:    4
hexadec.:   4

decimal:    5
hexadec.:   5

decimal:    6
hexadec.:   6

decimal:    7
hexadec.:   7

decimal:    8
hexadec.:   8

decimal:    9
hexadec.:   9

decimal:    10
hexadec.:   A

decimal:    11
hexadec.:   B

decimal:    12
hexadec.:   C

decimal:    13
hexadec.:   D

decimal:    14
hexadec.:   E

decimal:    15
hexadec.:   F

它打印出的正是我想要的,但我不明白它背后的过程。如果我没记错的话 integer + 'character' 通过ascii table.

将数字转换为字符

假设我们有数字 11,那么 11 - 10 = 1 在 ascii 中是 49,A 在 ascii 中是 65。那么 49 + 65 = 66 是怎么得来的。 我敢肯定这种想法是完全错误的,我只是想告诉你我认为它在后台做了什么。

当你改变时

printf("hexadec.: \t%c\n", number  - 10 + 'A');

对此:

printf("hexadec.: \t%c\n", number  - 9 + 'A');

当 'number' 大于 10 时得到的第一个字母是 'B'。

那是因为你从 'number' 的当前值开始计算字母数。

所以当 number 的值为 12 时,你用 10 减去它,你将值 2 存储在 number 中 'A' + 2 = 'C'.

你只要数一下字母就可以了。