C语言基本笔记(4)——进制转换与标准输出

进制转换速查表

操作 方法 示例
二进制 → 十进制 按权展开求和(2的幂次) 1011B → 11
二进制 → 八进制 每3位分组,转为八进制数 101101B → 55O
二进制 → 十六进制 每4位分组,转为十六进制数 10110101B → B5H
十进制 → 二进制 整数除2取余,小数乘2取整 11.625 → 1011.101B
十进制 → 八进制 整数除8取余,小数乘8取整 51.5 → 63.4O
十六进制 → 二进制 每位转为4位二进制 B5H → 10110101B
1. 二进制(Binary)

二进制 → 十进制
方法:按权展开求和
示例:1011.101B →
1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 1×2⁻¹ + 0×2⁻² + 1×2⁻³
= 8 + 0 + 2 + 1 + 0.5 + 0 + 0.125 = 11.625

二进制 → 八进制
方法:每3位二进制为一组,不足补0(整数部分左补,小数部分右补)
示例:101101B →
101 101 → 5 5 → 55O

二进制 → 十六进制
方法:每4位二进制为一组,不足补0
示例:10110101B →
1011 0101 → B 5 → B5H

2. 八进制(Octal)

八进制 → 十进制
示例:63.4O →
6×8¹ + 3×8⁰ + 4×8⁻¹ = 48 + 3 + 0.5 = 51.5

八进制 → 二进制
方法:每位八进制转为3位二进制
示例:72O→
7=111, 2=010 → 111 010B → 111010B

八进制 → 十六进制
方法:先转二进制再转十六进制
示例:72O → 111010B → 0011 1010 → 3AH

3. 十进制(Decimal)

十进制 → 二进制
整数:除2取余,逆序排列
小数:乘2取整,顺序排列
示例:11.625 →
整数部分 11 ÷ 2 → 1011B
小数部分 0.625 × 2 → 0.101B
合并结果:1011.101B

十进制 → 八进制/十六进制
方法:整数部分除基取余,小数部分乘基取整
示例(转八进制):51.5 →
整数部分 51 ÷ 8 → 63O
小数部分 0.5 × 8 → 4O
合并结果:63.4O

4. 十六进制(Hexadecimal)

十六进制 → 十进制
示例:A3.FH →
10×16¹ + 3×16⁰ + 15×16⁻¹ = 160 + 3 + 0.9375 = 163.9375

十六进制 → 二进制
方法:每位十六进制转为4位二进制
示例:B5H →
B=1011, 5=0101 → 10110101B

十六进制 → 八进制
方法:先转二进制再转八进制
示例:B5H → 10110101B → 010 110 101 → 265O

注意

  1. 八进制与十六进制的标识

    • C语言中,八进制以 0 开头(如 077),十六进制以 0x 开头(如 0xFF)。
    • 避免在八进制中使用 8 或 9(非法字符)。
  2. 二进制输出的实现

    • C语言标准库无直接二进制输出函数,需手动实现位操作。
  3. 负数的处理

    • 编程语言中负数的进制输出通常以补码形式表示(如 -1 的二进制为全1)。

C语言标准输出

#include <stdio.h>
int main() 
{
	int num = 255;    
	// 十进制输出    
	printf("十进制: %d\n", num);   // 输出 255    
	// 八进制输出(无前缀)    
	printf("八进制: %o\n", num);   // 输出 377    
	// 十六进制输出(小写字母)    
	printf("十六进制: %x\n", num); // 输出 ff    
	// 十六进制输出(大写字母)    
	printf("十六进制: %X\n", num); // 输出 FF    
	// 二进制输出(需手动实现或使用非标准函数)    
void print_binary(int n) 
	{
	    if (n > 1) print_binary(n >> 1);        
	    printf("%d", n & 1);    
	}    
	printf("二进制: ");    
	print_binary(num); // 输出 11111111    
	return 0;
}
posted @ 2025-04-11 20:04  故渊Y  阅读(353)  评论(0)    收藏  举报