10進数を16進数に変換するために+55を使用する理由。このコードでは、+ 48を使用して整数を文字に変換します。温度<10の場合。ただし、temp> = 10の場合、+ 55を使用します。 +55とはどういう意味ですか?
#include<stdio.h>
int main(){
long int decimalNumber,remainder,quotient;
int i=1,j,temp;
char hexadecimalNumber[100];
printf("Enter any decimal number: ");
scanf("%ld",&decimalNumber);
quotient = decimalNumber;
while(quotient!=0){
temp = quotient % 16;
//To convert integer into character
if( temp < 10)
temp =temp + 48;
else
temp = temp + 55;
hexadecimalNumber[i++]= temp;
quotient = quotient / 16;
}
printf("Equivalent hexadecimal value of decimal number %d: ",decimalNumber);
for(j = i -1 ;j> 0;j--)
printf("%c",hexadecimalNumber[j]);
return 0;
}
ASCII環境では、55は'A' - 10
に等しくなります。これは、55を加算することは、10を減算して'A'
を加算することと同じであることを意味します。
ASCIIでは、'A'
から'Z'
の値は隣接して連続しているため、これは10を'A'
に、11を'B'
にマップします。
temp
の値が10未満の場合、適切なASCIIコードは48 + temp
:
0 => 48 + 0 => '0'
1 => 48 + 1 => '1'
2 => 48 + 2 => '2'
3 => 48 + 3 => '3'
4 => 48 + 4 => '4'
5 => 48 + 5 => '5'
6 => 48 + 6 => '6'
7 => 48 + 7 => '7'
8 => 48 + 8 => '8'
9 => 48 + 9 => '9'
10以上の値の場合、適切な文字は55 + temp
です。
10 => 55 + 10 => 'A'
11 => 55 + 11 => 'B'
12 => 55 + 12 => 'C'
13 => 55 + 13 => 'D'
14 => 55 + 14 => 'E'
15 => 55 + 15 => 'F'
[〜#〜] ascii [〜#〜] Cでの文字のエンコードのため。余り(temp
)が10未満の場合、16進数の数字も0から9の範囲。文字「0」から「9」はASCII 48から57の範囲にあります。
剰余が10より大きい場合(剰余演算%
のため、常に15未満)、16進数はAからFの範囲にあり、ASCIIは次のようになります。 65から70の範囲です。したがって、temp + 55
は65から70の数字であり、したがって「A」から「F」の範囲の文字を与えます。
文字列char[] digits = "0123456789ABCDEF";
を使用し、残りをこの文字列のインデックスとして使用するのがより一般的です。あなたの質問の方法は(おそらく)同様に機能します。
16進数は、0〜9の数字とA〜Fのアルファベットである16の記号を使用して表される数字です。 10進数を16進数に変換するcプログラムを作成する手順は、次のとおりです。各ステップで10進数を16で除算し、余りを取ります。
ここでは、余りに0〜9の数字を使用し、10〜15の数字を表すために、アルファベットA、B、C、D、E、Fを使用します。ここで、すべての余りを下から上に順番に結合します。つまり、Aこれは10の16進数(10進数)です。
例:10進数の10を16進数に変換するには
16 | 10 | 0 – A
次に、すべての余りを下から上に順番に結合します。これは10の16進数です(10進数)
プログラムロジック:10進数のnを入力し、nを16で除算し(16進数以降)、余りを配列に保存し、nの商をnがゼロより大きくなるまで繰り返します。
寄稿者:www.programmingsimplysolved.com