C语言之进制之间的转换

C语言之进制之间的转换,第1张

计算机中一般是二进制敬罩烂、八进制、十进制和十六进制之间的相互转换,主要是围绕 二进制 进行转换,也就是说 二进制 是核心。

[图片上传失败...(image-9e6904-1533226303616)]

第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。

第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。

方法为:把八进制、十六进制数按权展开、相加即得十进制数。

第一种:他们之间的转换可以先转成二进制然后再相互转换。

第二种:他们之间的转换可以先转成十进制然后再相互转换。

数据在内存中存储的时候都是以 二进制 的形式存储的.int num = 10 原码、反码补码都是二进制.只不过是二进制的不同的表现形式.数据是以 补码 的二进制存储的.

1个int类型的变量.在32位编译器内存中占据4个字节(这里不单独讨论int类型的具体的字节数,若不明白看下面的拓展资料)

00000000 00000000 00000000 00000000

如果最高为是0 那么表示这个数是1个正数

如果最高为是1 那么表示这个数是1个负数

最高位表示符号位. 剩下的位数.是这个数的绝对值的二进制.

绝对值: 正数的绝对值是自己,负数的绝对值去掉负号.

正数的反码就是其原码.负数的反码就亮漏是在其原码的基础之上 符号位不变,其他位取反.

正数的补码就是其原码.负数的补码就是在其反码的基础之上+1

任何数据都是以其 二进制的补码 形式存储在内存中的

计算机中只有加法没有减法.为了更加低成本的计算出结果,所以使用补码来存储数据.

3 - 2这个减法运闷没算对于计算机而言它的理解是 3 + (-2)

C语言中常用的有十进制、二进制、八进制(用0表示)、十六进制(用0x表示)。

十进制转二烂卜进制:

十进制转二进制采取除于2取余的方式。

将十进制数除于2得到商和余数,

将商继续除于2一直到商为0,

将得到的余数倒叙排列就是转换为二进轮胡制的结果

二进制饥桐穗转十进制:

从右向左用二进制位上的每一个数乘以2的相应次方

如二进制1010转换为十进制:

1010 = 0*(2的0次方)+1*(2的1次方)+0*(2的2次方)+1*(2的3次方) = 2 + 8 = 10

八进制转换为二进制

将二进制数自右向左每三位分为一段(若不足三位用0补齐),

然后将二进制的每三位转换为一位八进制数

如将二进制数0101010转换为八进制:

0 101 010不够三位的补0得到

000 101 010 = 052 = 0052(八进制用0表示)

十六进制转换为二进制

将二进制数自右向左每四位分为一段(若不足三位用0补齐),

然后将二进制的每4位转换为一位十六进制数

如将二进制数0101100转换为十六进制:

010 1100不够三位的补0得到

0010 1100 = 2C= 0x2C(十六进制用0x表示)

#include <stdio.h>

void transfer(int A[], int *c, int n, int b)

{

int i = 0

while(n>0)

{

A[i++] = n % b

n /= b

}

*c = i

}

int main()

{

int 行烂a[32],c,n,b

printf("输入整数和要转换为的进制:")

scanf("%d %d",&n,&b)

if( n<0 || 枣郑b>9 || b< 2)

{

printf("数档岩漏据非法。")

return 0

}

transfer(a,&c,n,b)

printf("结果为:")

while(--c >= 0)

{

printf("%d",a[c])

}

return 0

}


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

原文地址: http://outofmemory.cn/yw/12556699.html

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

发表评论

登录后才能评论

评论列表(0条)

保存