【问题标题】:Converting a decimal to a hexadecimal number将十进制数转换为十六进制数
【发布时间】:2013-05-31 11:30:45
【问题描述】:

为什么我们使用 + 55 将十进制转换为十六进制 num 。在这段代码中,我们使用 +48 将整数转换为字符。当温度 =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;
}

【问题讨论】:

标签: c decimal number-formatting hex


【解决方案1】:

在 ASCII 环境中,55 等于 'A' - 10。这意味着加 55 与减 10 并加 'A' 相同。

在 ASCII 中,'A''Z' 的值是相邻且连续的,因此这会将 10 映射到 'A',将 11 映射到 'B' 等等。

【讨论】:

    【解决方案2】:

    对于小于 10 的 temp 的值,相应的 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'
    

    【讨论】:

      【解决方案3】:

      由于C中字符的ASCII编码。当余数(temp)小于十时,十六进制的数字也在0到9的范围内。字符'0'到' 9' 在 48 到 57 的 ASCII 范围内。

      当余数大于 10(并且总是小于 15,由于余数运算%)时,十六进制数字在 A 到 F 的范围内,在 ASCII 中是在 65 到 70 的范围内。所以temp + 55 是一个从 65 到 70 的数字,因此给出了一个介于 'A' 到 'F' 范围内的字符。

      更常见的是使用字符串char[] digits = "0123456789ABCDEF"; 并将余数用作该字符串中的索引。您问题中的方法(可能)也有效。

      【讨论】:

        【解决方案4】:

        十六进制数是使用 0 -9 数字和 A - F 字母的 16 个符号表示的数字。编写一个c程序将十进制数转换为十六进制的过程是:将十进制数每一步除以16并取余

        这里使用 0 到 9 个数字来表示余数,然后我们使用字母 A、B、C、D、E、F 来表示 10 到 15 个数字。现在从下到上依次组合所有余数,即 A 这是十六进制数 10(十进制)

        例如将十进制数 10 转换为十六进制

        16 | 10 | 0 - 一个

        现在从下到上依次组合所有余数,即 A 。这是 10 的十六进制数(十进制)

        程序逻辑:输入十进制数 n,将 n 除以 16(因为是十六进制)并将余数保存在数组中,并在 n 中重复商,直到 n 大于零

        在以下位置查看程序: http://www.programmingsimplysolved.com/c-programs/c-program-to-convert-decimal-number-to-hexadecimal-using-functions/

        贡献者:www.programmingsimplysolved.com

        【讨论】:

        • 请在此处写下解决方案,而不是包含将来可能会损坏的链接。谢谢!
        猜你喜欢
        • 1970-01-01
        • 2015-01-26
        • 1970-01-01
        • 2018-07-04
        • 2014-04-16
        • 1970-01-01
        • 2010-10-16
        相关资源
        最近更新 更多