簡體   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