[英]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.