web-dev-qa-db-ja.com

10進数を16進数に変換する

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;
}
4
MD MAHBUB ALAM

ASCII環境では、55は'A' - 10に等しくなります。これは、55を加算することは、10を減算して'A'を加算することと同じであることを意味します。

ASCIIでは、'A'から'Z'の値は隣​​接して連続しているため、これは10を'A'に、11を'B'にマップします。

8
caf

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'
5
John

[〜#〜] 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";を使用し、残りをこの文字列のインデックスとして使用するのがより一般的です。あなたの質問の方法は(おそらく)同様に機能します。

4
Kninnug

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がゼロより大きくなるまで繰り返します。

プログラムの表示: http://www.programmingsimplysolved.com/c-programs/c-program-to-convert-decimal-number-to-hexadecimal-using-functions/

寄稿者:www.programmingsimplysolved.com