您的位置:首页 > 汽车 > 时评 > 东莞英文建站公司_陕西建设网官网app_电脑培训网上培训班_网站优化的方式有哪些

东莞英文建站公司_陕西建设网官网app_电脑培训网上培训班_网站优化的方式有哪些

2025/6/20 5:12:00 来源:https://blog.csdn.net/qq_19406475/article/details/145761423  浏览:    关键词:东莞英文建站公司_陕西建设网官网app_电脑培训网上培训班_网站优化的方式有哪些
东莞英文建站公司_陕西建设网官网app_电脑培训网上培训班_网站优化的方式有哪些

进制转换是计算机科学和数学中的基础操作,主要用于不同数制之间的数值表示转换。以下是常见进制(二进制、八进制、十进制、十六进制)的转换方法及示例:


一、其他进制 → 十进制

方法:按权展开,逐位相加。
公式
[ \text{十进制值} = \sum (每一位数值 \times 基数^{\text{位权}}) ]

示例

  1. 二进制 → 十进制
    ( 1011_2 = 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 = 8 + 0 + 2 + 1 = 11_{10} )

  2. 十六进制 → 十进制
    ( 2A_{16} = 2×16^1 + 10×16^0 = 32 + 10 = 42_{10} )


二、十进制 → 其他进制

方法:除基取余法(整数部分)或乘基取整法(小数部分),倒序排列余数。

1. 整数部分转换(除基取余)

步骤

  1. 用十进制数除以目标进制基数,记录余数。
  2. 将商继续除以基数,直到商为0。
  3. 余数倒序排列即为结果。

示例
将 ( 25_{10} ) 转换为二进制:
[
\begin{align*}
25 ÷ 2 &= 12 \ \text{余} \ 1 \
12 ÷ 2 &= 6 \ \ \ \text{余} \ 0 \
6 ÷ 2 &= 3 \ \ \ \text{余} \ 0 \
3 ÷ 2 &= 1 \ \ \ \text{余} \ 1 \
1 ÷ 2 &= 0 \ \ \ \text{余} \ 1 \
\end{align*}
]
倒序排列余数:( 11001_2 )

2. 小数部分转换(乘基取整)

步骤

  1. 用小数部分乘以目标进制基数,记录整数部分。
  2. 取结果的小数部分继续乘以基数,直到小数部分为0或达到精度要求。
  3. 整数部分正序排列即为结果。

示例
将 ( 0.625_{10} ) 转换为二进制:
[
\begin{align*}
0.625 × 2 &= 1.25 \quad \text{取整} \ 1 \
0.25 × 2 &= 0.5 \quad \ \ \text{取整} \ 0 \
0.5 × 2 &= 1.0 \quad \ \ \text{取整} \ 1 \
\end{align*}
]
正序排列整数部分:( 0.101_2 )


三、非十进制之间的直接转换

1. 二进制 ↔ 八进制/十六进制
  • 二进制 → 八进制:每 3位 二进制为一组,转换为1位八进制(不足补零)。
    示例
    ( 101\ 110_2 ) → ( 5_8 \ 6_8 = 56_8 )

  • 二进制 → 十六进制:每 4位 二进制为一组,转换为1位十六进制(不足补零)。
    示例
    ( 1101\ 0110_2 ) → ( D_{16} \ 6_{16} = D6_{16} )

  • 反向转换:将八进制/十六进制每一位展开为3/4位二进制。
    示例
    ( 3F_{16} = 0011\ 1111_2 )

2. 八进制 ↔ 十六进制

需以二进制或十进制为中间桥梁。
示例
( 75_8 → 111\ 101_2 → 0011\ 1101_2 → 3D_{16} )


四、进制表示符号

  • 二进制:前缀 0b(如 0b1010
  • 八进制:前缀 0(如 017
  • 十六进制:前缀 0x(如 0x1A

五、快速对照表

十进制二进制八进制十六进制
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

掌握这些方法后,可灵活实现任意进制间的转换!

在C语言中实现进制转换可以通过多种方法,涵盖标准库函数、手动算法及位运算等。以下是常见方法及示例:


1. 使用库函数快速转换

1.1 sprintfsscanf
  • 十进制转其他进制
    int num = 255;
    char hex[10], oct[10];
    sprintf(hex, "%X", num);  // 十进制→十六进制,输出FF
    sprintf(oct, "%o", num);  // 十进制→八进制,输出377
    
  • 其他进制转十进制
    sscanf("FF", "%x", &num);  // 十六进制→十进制,num=255
    sscanf("377", "%o", &num); // 八进制→十进制,num=255
    
    支持十六进制(%x)、八进制(%o)和十进制(%d)的格式化输入输出。
1.2 strtol 函数

可将任意进制字符串转换为十进制:

char hex[] = "1A";
long decimal = strtol(hex, NULL, 16); // 十六进制→十进制,结果为26

参数16可替换为其他基数(如2、8)。


2. 手动实现转换算法

2.1 十进制转其他进制(除基取余法)

示例:十进制转二进制

void decimalToBinary(int n) {int binary[32], i = 0;while (n > 0) {binary[i++] = n % 2;n /= 2;}for (int j = i-1; j >= 0; j--) printf("%d", binary[j]); // 输出余数倒序
}

类似方法可扩展至八进制、十六进制(需处理余数≥10时用字母表示)。

2.2 其他进制转十进制(按权展开法)

示例:二进制转十进制

int binaryToDecimal(char *binaryStr) {int decimal = 0, len = strlen(binaryStr);for (int i = 0; i < len; i++) {if (binaryStr[len-i-1] == '1')decimal += (1 << i); // 位权累加}return decimal;
}

此方法支持任意进制,需根据基数调整计算逻辑。


3. 位运算优化

适用于二进制与其他进制的快速转换:

void decimalToBinary(int num) {for (int i = 31; i >= 0; i--) printf("%d", (num >> i) & 1); // 逐位提取二进制位
}

此方法直接操作内存中的二进制位,效率较高。


4. 处理不同进制的输入输出

  • 直接表示
    int oct = 077;   // 八进制(前缀0)
    int hex = 0xFF;  // 十六进制(前缀0x)
    
  • 格式化输出
    printf("%o %x", oct, hex); // 输出八进制和十六进制
    

总结

  • 简单场景:优先使用库函数(如sprintfstrtol)。
  • 自定义需求:手动实现算法(如递归、位运算)。
  • 性能优化:结合位运算或预计算表提升效率。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com