经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言练习 通过移位算法10进制转2进制
来源:cnblogs  作者:QU头  时间:2022/1/17 11:10:31  对本文有异议

通过移位算法10进制转2进制

C语言实现

代码参考C Primer Plus 第15章 位操作编程书后实例,修改而来

代码如下

  1. #include <stdio.h>
  2. #include <limits.h> //提供CHAR_BIT宏定义
  3. char *itobs(long long int number, char *string);
  4. void showBits(const char *string);
  5. int main(int argc, char const *argv[])
  6. {
  7. // CHAR_BIT是一个宏定义,定义了一个字节对应的位大小
  8. char bin_str[CHAR_BIT * sizeof(long long int) + 1]; // 声明了一个临时的数组,用来存放字符1,字符0,因为最后还有一个'\0',所以 + 1
  9. long long int number;
  10. puts("Please input long long int type number!,Another character to leave!");
  11. while ((scanf("%lld", &number) & 01) == 1)
  12. {
  13. itobs(number, bin_str);
  14. showBits(bin_str);
  15. }
  16. puts("bye!");
  17. return 0;
  18. }
  19. /**
  20. * @description 传入一个数字,和一个规定长度的字符串,向字符串中填充数字的二进制字符并返回
  21. * @param number 传入的long long int 类型数据
  22. * @param string 规定长度的(空)字符串,长度为 CHAR_BIT * sizeof(long long int) + 1 (+1为放置'\0')
  23. * @return string 返回填充好传入参数'string' 的二进制字符数组,可用于打印
  24. */
  25. char *itobs(long long int number, char *string)
  26. {
  27. const static long long int size = CHAR_BIT * sizeof(long long int); // 得到long long int的位大小
  28. for (long long int i = size - 1; i >= 0; i--, number >>= 1) //这里必须为 >>=,也可以是 number = number >> 1; 得到的数字从后往前排序
  29. {
  30. string[i] = (number & 1) + '0'; //这里 & 1(或者 & 01(八进制1)),01为掩码,将其他的(除了0号位的位)置0.得到的结果是数1/0,加上字符'0'得到字符'1'/'0'
  31. }
  32. string[size] = '\0';
  33. return string;
  34. }
  35. /**
  36. * @description 用于打印数组中写好的二进制的字符 (4个为一组)
  37. * @param string 传入的字符串
  38. * @return void
  39. */
  40. void showBits(const char *string)
  41. {
  42. long long int i = 0;
  43. while (string[i])
  44. {
  45. putchar(string[i]);
  46. if (++i % 4 == 0 && string[i])
  47. {
  48. putchar(' ');
  49. }
  50. }
  51. putchar('\n');
  52. }

原文链接:http://www.cnblogs.com/aquawius/p/15771272.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号