1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 输入一个十进制数 输出他的十六进制 十进制转十六进制C语言代码

输入一个十进制数 输出他的十六进制 十进制转十六进制C语言代码

时间:2023-12-03 01:13:56

相关推荐

输入一个十进制数 输出他的十六进制 十进制转十六进制C语言代码

题目简介:从键盘上输入一个十进制数,输出他的十六进制数

思路:

定义一个char类型的数组,然后对输入的数每次取余16,把余数存到数组对应的位置上,如果大于等于10转化为a ~ f。

C语言的解决方案:

#include<stdio.h>int main(){int a;scanf_s("%d", &a);//用变量a存放输入的这个数,别问为什么是scanf_s,因为用的是VisioStdio编译器,换个编译器就是scanf();int tmp;char bit[8] = {'\0' };//创建一个长度为8的char类型数组,为什么是8,因为int占32位,十六进制每一位占4个二进制位,所以开辟32 / 4 = 8个长度就足够用了int i = 0;while (a != 0) {tmp = a % 16;//tmp变量存放余数,也就是当前这一位应该存放的数if (tmp >= 10)bit[i++] = tmp - 10 + 'a';//如果余数是大于10的数,对应位 a ~ f,转化为a ~ f,需要先减去10然后加上字母‘a’对应的Ascll码elsebit[i++] = tmp - 0 + '0';//同理,为什么-0,因为为了和上面形式一致,完全可以不减 0;a = a / 16;}for (i = 7; i >= 0; i--)//输出,但是因为存数据的时候是从左向右依次是低位到高位,所以要逆序输出{printf("%c", bit[i]);}}

一些疑问:

为什么转成16进制数组长度为8?

答:因为因为int占32位,十六进制每一位占4个二进制位,所以开辟32 / 4 = 8个长度就足够用了。

当tmp大于10的时候要执行 bit[i++] = tmp - 10 + ‘a’; 这句在干什么?

答:tmp中存放的是余数,当余数为10~15的时候对应的是a ~ f,而且 bit 数组是char类型,就可以直接先减掉10然后加上 ‘a’ 所对应的Ascll码,将其转化为a ~ f。

为什么要倒着输出?

答:因为存数据的时候是从左向右依次是低位到高位,但真实的值是左边是高位右边是低位,所以要倒着输出

拓展:

如果要换成十进制转二进制,修改方法:bit数组的长度修改为32,while里直接tmp / 2,然后a = a / 2就好

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。