欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

十进制转十六进制,八进制和二进制_C语言

程序员文章站 2022-03-08 18:49:45
...

printf有提供部分可直接输出进制转换的捷径:

#include<stdio.h>

int main () {
	int num;
	scanf("%d", &num);
	printf("hex = %#x\nHEX = %#X\noct = 0%o", num, num, num);
	return 0;
}

示例结果:
十进制转十六进制,八进制和二进制_C语言
但似乎也没有二进制的直接输出捷径,况且单单用printf就得到结果,也太枯燥了吧,所以还是得折腾一下自己:

#include<stdio.h>

#define MAX 1000

// 10->16
void DEC_HEX (int DEC) {
	char result[MAX]; // 用于存储结果,十六进制需要用到字母表示i,所以需要字符数组
	int i = 0;
	while (DEC) {
		if(DEC % 16 < 10) { // 小于10都用数字0~9表示,具体转换算法查看ASCII码表
			result[i++] = (char)(DEC%16+48);
		} else { // 大于等于10需要用到字母A~F表示
			result[i++] = (char)(DEC%16+55);
		}
		DEC /= 16;
	}
	printf("HEX = 0x");
	// 逆序输出正确结果
	for(i = i-1; i >= 0; i --) {
		printf("%c", result[i]);
	}
	printf("\n");
}

// 10->8
void DEC_OCT (int DEC) {
	int result[MAX];
	int i = 0;
	while (DEC) {
		result[i++] = DEC%8;
		DEC /= 8;
	}
	printf("OCT = 0");
	for(i = i-1; i >= 0; i --) {
		printf("%d", result[i]);
	}
	printf("\n");
}

// 10->2
void DEC_BIN (int DEC) {
	int result[MAX];
	int i = 0;
	while (DEC) {
		result[i++] = DEC%2;
		DEC /= 2;
	}
	// 更加美观输出二进制结果,需要给结果前面补零
	int j;
	for(j = 0; j < i%4; j ++) {
		result[i++] = 0;
	}
	// 并且用变量time计数,每四位插一个空格
	int time = 0;
	printf("BIN = ");
	for(i = i-1; i >= 0; i --) {
		printf("%d", result[i]);
		time ++;
		if(time == 4) {
			time = 0;
			printf(" ");
		}
	}
	printf("\n");
}

int main () {
	// 16进制HEX 10进制DEC 8进制OCT 2进制BIN
	int HEX, DEC, OCT, BIN;
	printf("DEC = ");
	scanf("%d", &DEC);
	DEC_HEX(DEC);
	DEC_OCT(DEC);
	DEC_BIN(DEC);
	
	return 0;
}

示例结果:
十进制转十六进制,八进制和二进制_C语言

相关标签: C语言习题