繁体   English   中英

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

[英]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;
}

Output:

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 表将数字转换为字符。

假设我们有数字 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');

当“数字”超过 10 时,您得到的第一个字母是“B”。

那是因为您从“数字”的当前值开始计算字母。

因此,当数字的值为 12 时,您将其减去 10,并将值 2 存储在数字“A”+ 2 =“C”中。

你只需数数字母。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM