c语言十进制转化为十六进制

c语言十进制转化为十六进制,第1张

十进制转化为十六进制代码

#include "stdioh" int main()

{

int num=0;

int a[100];

int i=0;

int m=0;

int yushu;

char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

printf("请输入一个十进制数:");

scanf("%d",&num); while(num>0) { yushu=num%16;

a[i++]=yushu;

num=num/16;

} printf("转化为十六进制的数为:0x"); for(i=i-1;i>=0;i--)//倒序输出 {m=a[i];

printf("%c",hex[m]); } printf("\n");

}

程序运行结果:

扩展资料:

进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。

举例:二进制数转换为十进制数

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

所以,设有一个二进制数:0110 0100,转换为10进制为:

下面是竖式:

0110 0100 换算成十进制

第0位 0 20 = 0

第1位 0 21 = 0

第2位 1 22 = 4

第3位 0 23 = 0

第4位 0 24 = 0

第5位 1 25 = 32

第6位 1 26 = 64

第7位 0 27 = 0

公式:第N位2(N)

---------------------------

100

用横式计算为:

0 20 + 0 21 + 1 22 + 0 23 + 0 24 + 1 25 + 1 26 + 0 27 = 100

0乘以多少都是0,所以我们也可以直接跳过值为0的位:

1 22 + 1 25 +126 = 100

参考资料:

百度百科-进制转换

要将C语言转化为python,前提:

1 对C语言语法即python编程均熟练掌握;

2 对算法相关有一定了解;

3 至少可以看懂要转换的C语言程序。

由于C语言的语句,与python没有对应关系,所以只能按照如下方式转换:

1 读懂C语言代码实现功能,可以以函数为单位;

2 按照功能,依照python方式实现相同功能。

C语言中实现10进制转换为任意进制的过程为:

定义数组int rs[32],保存转换后的数据,整数的转换结果最多32位(4字节8位)

定义一个数组char map[]={'0','1','2','3',,'9','A','B','F'},完成相应数值对应的转换后的字符

输入10进制数(整数)num

转入转换进制基数(2-16)ind

循环对num进行模ind运算,得到余数存储到数组rs中

num缩小ind倍

当num为0时结束循环

反向输出数组rs中对应的各元素对应的map字符,得到转换结果

参考代码:

#include <stdioh>

int main()

{

    char map[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    int i,c[32],num,ind;

    do {printf("input num: ");scanf("%d", &num );}while(num<0 );

    do {printf("input ind: ");scanf("%d", &ind );} while( ind>16||ind<2);

    i=0;

    do {

        c[i++]=num%ind;

        num/=ind;

    } while(num!=0) ;

    for(i--;i>=0;i--)

        printf("%c",map[c[i]] );

    printf("\n");

    return 0;

}

运行结果:

input num: 100

input ind: 2

1100100

input num: 100

input ind: 8

144

input num: 100

input ind: 16

64

把C语言代码转换为MIPS:

以下是c语言代码:

while (candidate_gcd <= min)

{

if (((a mod candidate_gcd) == 0) &&((b mod candidate_gcd) ==

0))

{

current_gcd = candidate_gcd;

}

candidate_gcd = candidate_gcd + 1;

}

以下为转换为mips后的代码:

首先设置变量:

candidate_gcd = $t0

min = $t1

a mod candidate_gcd = $t2

b mod candidate_gcd = $t3

current_gcd = $t4

$t6 = 0

$t5

代码如下:(绿色为注释)

Label3: //设置标签Label3

ble $t0,$t1,Label //当$t0 小于等于$t1 时,跳到标签Label

Label: //设置标签Label

Add $t5,$t2,$t3 //将$t2 和$t3 相加赋值给$t5

Li $t6,0 //给$t6 赋值为0

Leq $t5, $t6,Label1 //判断如果$t6=$t5=0,跳到标签Label1

Label1: //设置标签Label1

Move $t4, $t0 //$t4=$t0

Addi $t0, $t0,1 //$t0=$t0+1(自加加)

J Label3 //跳到标签Label3,这里其实就是实现c 语言

中的while 无限循环

在C语言中,short类型数据的范围是-32768~32767,下面程序段的输出结果为0。short i=65536;printf("%d\n",i);

造成这样的原因是发生了“溢出”。就好比假设你有一把算盘,只有四个档位,每个档位只有五粒珠子,当然,它能存储的最大数就是9999,但是你要再给他加一,他就变成了0,因为他把进位给丢失了。

for(i = 0; m; i++),i++就是i自加1,m写在这里表示m为0的时候跳出循环,不是装逼的时候建议不要这样写, for(; i; i--)当然是i每次循环递减,当i减到0的时候跳出循环,写作 0 == i、0 == m 比直接写m、i较好一点

对了,经过上面的循环以后,i已经不再是0,i++这句会使得i每次递增

两个办法:

1、彻底改,摄像头的库文件,改成相应的C语言的库文件。输入输出,改成stdioh中的printf,scanf。

2、仍然使用C++的库,但是用一个头文件,将C++的库与C程序分隔开。在头文件中,用C形式函数,调用C++库,并且在编译成o文件。在你的程序中,通过调用头文件中的C形式函数,间接调用C++库。这样做,只是形式上的C语言。编译时恐怕还要用C++编译器。

以上就是关于c语言十进制转化为十六进制全部的内容,包括:c语言十进制转化为十六进制、C语言怎么转化成python、C语言中如何用算法实现进制间的转化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9732054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存