十进制转二进制、十进制转十六进制

今天对十进制转二进制、十进制转十六进制,的讲解,日常生活中,我们用得最多的是十进制,
但是在C语言中我们都是使用二进制和十六进制。
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,
因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。
19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,
二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,
易于用电子方式实现。

二进制数据的表示法
二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,逢2进1,
其权的大小顺序为2²、2¹、2º、  、  。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,
可写为:

二进制数据一般可写为: 
【例】将二进制数据111.01写成加权系数的形式。 
二进制和十六进制,八进制一样,都以二的幂来进位的。

十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。
它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;
N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
【例】
16进制的20表示成10进制就是:2×16¹+0×16º=32
10进制的32表示成16进制就是:20
十进制数可以转换成十六进制数的方法是:十进制数的整数部分“除以16取余”,十进制数的小数部分“乘16取整”,进行转换。
比如说十进制的0.1转换成八进制为0.0631463146314631。就是0.1乘以8=0.8,不足1不取整,0.8乘以8=6.4,取整数6,

 0.4乘以8=3.2,取整数3,依次下算。


  1. #include<stdio.h>
  2. #include<string.h>


  3. char *shi_to_er( int n );
  4. char *shi_to_shiliu( int n );
  5. int main()
  6. {
  7. printf("\n***************************************************************\n");
  8. printf("* 请选择转换方式: 十进制转二进制“110”、十进制转十六进制“120” *\n");
  9. printf("***************************************************************\n");
  10. char a[128] = {0};
  11. gets(a);
  12. if( !strcmp(a,"110"))
  13. {
  14. int n;
  15. printf("请输入一个整数!\n");
  16. scanf("%d",&n);

  17. char *p = shi_to_er(n);
  18. puts(p);
  19. }
  20. else if( !strcmp(a,"120"))
  21. {
  22. int n;
  23. printf("请输入一个整数!\n");
  24. scanf("%d",&n);

  25. char *p = shi_to_shiliu(n);
  26. puts(p);
  27. }
  28. else
  29. {
  30. printf("输入错误,请重新输入!\n");
  31. }

  32. return 0;
  33. }

  34. char *shi_to_er( int n )
  35. {
  36. static char buf[32] = {0};
  37. int i = 0,j;

  38. while( n )
  39. {
  40. buf[i++] = (n % 2) + '0';
  41. n = n / 2;
  42. }
  43. for( j = 0; j < i / 2; j++ )
  44. {
  45. buf[j] ^= buf[i - 1 - j];

  46. buf[i - 1 - j] ^= buf[j];

  47. buf[j] ^= buf[i - 1 - j];
  48. }

  49. return buf;
  50. }
  51. char *shi_to_shiliu( int n )
  52. {
  53. static char buf[8] = {0};
  54. int i = 0,j;

  55. while( n )
  56. {
  57. buf[i] = (n % 16);

  58. if( buf[i] > 10)
  59. {
  60. buf[i] = (buf[i] - 10) + 'a';
  61. }
  62. else
  63. {
  64. buf[i] = buf[i] + '0';
  65. }
  66. i++;
  67. n = n / 16;
  68. }

  69. for( j = 0; j < i / 2; j++ )
  70. {
  71. buf[j] ^= buf[i - 1 - j];

  72. buf[i - 1 - j] ^= buf[j];

  73. buf[j] ^= buf[i - 1 - j];
  74. }

return buf;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值