鱼C论坛

 找回密码
 立即注册
查看: 89|回复: 4

进制转换

[复制链接]
发表于 2024-4-17 13:22:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
十进制到2,8,16进制的转换
#include<stdio.h>
void Decimal_conversion (int x, int y)
{
        if(x>0)
        {
                Decimal_conversion(x/y,y);
                if(x%y<10)
                        printf("%d",x%y);
                else
                {
                        switch(x%y)
                        {
                        case 10:
                                printf("A");
                        case 11:
                                printf("B");
                        case 12:
                                printf("C");
                        case 13:
                                printf("D");
                        case 14:
                                printf("E");
                        case 15:
                                printf("F");
                        }
                }
        }
}
int main()
{
        int x, y;
        scanf("%d%d",&x, &y);
        Decimal_conversion(x,y);
        return 0;
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-17 13:23:04 | 显示全部楼层
小伙子,进制转换是个常见的问题,我来解释一下。

首先,我们先来看看十进制到二进制的转换吧。

  1. #include <stdio.h>

  2. void DecimalToBinary(int decimal) {
  3.     if (decimal == 0) { // 如果十进制数为0,则直接输出0
  4.         printf("0");
  5.         return;
  6.     }
  7.    
  8.     int binary[32]; // 创建一个数组来存放二进制位
  9.     int currentIndex = 0; // 记录当前二进制位的索引
  10.    
  11.     while (decimal > 0) {
  12.         binary[currentIndex++] = decimal % 2; // 取余数作为当前位的值
  13.         decimal /= 2; // 更新十进制数为除以2的结果
  14.     }
  15.    
  16.     // 倒序输出数组中的元素,即得到二进制数
  17.     for (int i = currentIndex - 1; i >= 0; i--) {
  18.         printf("%d", binary[i]);
  19.     }
  20. }

  21. int main() {
  22.     int decimal;
  23.     printf("请输入一个十进制数:");
  24.     scanf("%d", &decimal);
  25.     printf("转换成二进制为:");
  26.     DecimalToBinary(decimal);
  27.     printf("\n");
  28.    
  29.     return 0;
  30. }
复制代码


好了,现在我们来看看十进制到八进制的转换。

  1. #include <stdio.h>

  2. void DecimalToOctal(int decimal) {
  3.     if (decimal == 0) { // 如果十进制数为0,则直接输出0
  4.         printf("0");
  5.         return;
  6.     }
  7.    
  8.     int octal[32]; // 创建一个数组来存放八进制位
  9.     int currentIndex = 0; // 记录当前八进制位的索引
  10.    
  11.     while (decimal > 0) {
  12.         octal[currentIndex++] = decimal % 8; // 取余数作为当前位的值
  13.         decimal /= 8; // 更新十进制数为除以8的结果
  14.     }
  15.    
  16.     // 倒序输出数组中的元素,即得到八进制数
  17.     for (int i = currentIndex - 1; i >= 0; i--) {
  18.         printf("%d", octal[i]);
  19.     }
  20. }

  21. int main() {
  22.     int decimal;
  23.     printf("请输入一个十进制数:");
  24.     scanf("%d", &decimal);
  25.     printf("转换成八进制为:");
  26.     DecimalToOctal(decimal);
  27.     printf("\n");
  28.    
  29.     return 0;
  30. }
复制代码


最后,我们再来看看十进制到十六进制的转换。

  1. #include <stdio.h>

  2. void DecimalToHexadecimal(int decimal) {
  3.     if (decimal == 0) { // 如果十进制数为0,则直接输出0
  4.         printf("0");
  5.         return;
  6.     }
  7.    
  8.     char hexadecimal[32]; // 创建一个数组来存放十六进制位
  9.     int currentIndex = 0; // 记录当前十六进制位的索引
  10.    
  11.     while (decimal > 0) {
  12.         int remainder = decimal % 16; // 取余数作为当前位的值
  13.         if (remainder < 10) {
  14.             hexadecimal[currentIndex++] = remainder + '0'; // 如果余数小于10,转换为对应的字符
  15.         } else {
  16.             hexadecimal[currentIndex++] = remainder - 10 + 'A'; // 如果余数大于等于10,转换为对应的字符
  17.         }
  18.         decimal /= 16; // 更新十进制数为除以16的结果
  19.     }
  20.    
  21.     // 倒序输出数组中的元素,即得到十六进制数
  22.     for (int i = currentIndex - 1; i >= 0; i--) {
  23.         printf("%c", hexadecimal[i]);
  24.     }
  25. }

  26. int main() {
  27.     int decimal;
  28.     printf("请输入一个十进制数:");
  29.     scanf("%d", &decimal);
  30.     printf("转换成十六进制为:");
  31.     DecimalToHexadecimal(decimal);
  32.     printf("\n");
  33.    
  34.     return 0;
  35. }
复制代码


希望这些代码能帮助到你,有问题随时问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 15:24:45 | 显示全部楼层
FishC 发表于 2024-4-17 13:23
小伙子,进制转换是个常见的问题,我来解释一下。

首先,我们先来看看十进制到二进制的转换吧。

你咋知道对方的年龄和性别
称呼错了  多尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 15:24:52 | 显示全部楼层
wp231957 发表于 2024-04-17 15:24
你咋知道对方的年龄和性别
称呼错了  多尴尬


非常抱歉,我没有办法知道对方的具体年龄和性别。作为一个计算机程序,我只是根据您提供的问题和信息进行回答。如果我犯了错误,请您谅解,并告诉我正确的信息,我会尽力改正。有任何其他问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 15:34:49 | 显示全部楼层
本帖最后由 jackz007 于 2024-4-17 15:40 编辑
  1. #include <stdio.h>
  2. #include <string.h>

  3. const char c[][18] = {"0123456789abcdef" , \
  4.                      "0123456789ABCDEF"}                                                        ;

  5. /* 十进制整型数 d 转换为 x 进制字符串 s,x : 2 ~ 16 */
  6. char * dec2x(char s[] , int d , int x)
  7. {
  8.         int i , k , n                                                                           ;
  9.         strcpy(s , "-1")                                                                        ;
  10.         if(x >= 2 && x <= 16) {
  11.                 for(n = 0 , k = d ; k ; k /= x , n ++)                                          ;
  12.                 for(i = 0 , k = d , s[n] = '\0' ; k ; k /= x , i ++) s[n - i - 1] = c[0][k % x] ;
  13.         }
  14.         return s                                                                                ;
  15. }

  16. /* x 进制字符串 s 转换为十进制整型数,x : 2 ~ 16 */
  17. int x2dec(char s[] , int x)
  18. {
  19.         int d , k , n                                                                           ;
  20.         d = -1                                                                                  ;
  21.         if(x >= 2 && x <= 16) {
  22.                 for(d = n = 0 ; s[n] ; n ++) {
  23.                         for(k = 0 ; c[0][k] != s[n] && c[1][k] != s[n] ; k ++)                  ;
  24.                         if(c[0][k] == s[n] || c[1][k] == s[n]) {
  25.                                 d = d * x + k                                                   ;
  26.                         } else {
  27.                                 d = -1                                                          ;
  28.                                 break                                                           ;
  29.                         }               
  30.                 }
  31.         }
  32.         return d                                                                                ;
  33. }

  34. int main(void)
  35. {
  36.         char s[16][256]                                                                         ;
  37.         int d = 8193                                                                            ;
  38.         printf("  十进制:%d\n" , d)                                                            ;
  39.         printf("  二进制:%s\n" , dec2x(s[0] , d , 2))                                          ; // 以二进制显示十进制数   8193
  40.         printf("  八进制:%s\n" , dec2x(s[1] , d , 8))                                          ; // 以八进制显示十进制数   8193
  41.         printf("十六进制:%s\n" , dec2x(s[2] , d , 16))                                         ; // 以十六进制显示十进制数 8193
  42.         printf("  十进制:%d\n" , x2dec(s[0] , 2))                                              ; // 把二进制字符串转换回十进制数显示
  43.         printf("  十进制:%d\n" , x2dec(s[1] , 8))                                              ; // 把八进制字符串转换回十进制数显示
  44.         printf("  十进制:%d\n" , x2dec(s[2] , 16))                                             ; // 把十六进制字符串转换回十进制数显示
  45. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表