[关闭]
@RayChen 2016-12-09T00:54:02.000000Z 字数 1051 阅读 1472

【读书笔记】C Primer Plus ch.15位运算 示例程序15.1 整数转换成二进制字符串

Ray-logo


先说重点!

将数字转换为char类型
0+'0'='0'
1+'0'='1'

四种位的开闭方式
0 & 任意数 = 0
1 | 任意数 = 1
1 & n = n
0 | n = n

整数转换成二进制字符串

程序清单15.1 binbit.c程序

  1. #include <stdio.h>
  2. #include <limits.h>// 提供 CHAR_BIT 的定义,CHAR_BIT 表示每字节的位数
  3. // CHAR_BIT是包含在头文件<limits.h>中的宏定义,就是字节的最小位数,应该等于8
  4. char *itobs(int n, char * ps)
  5. // itobs 函数将整数转换成二进制字符串
  6. {
  7. int i;
  8. // static变量,运行时只暂时存在的自动变量(即局部变量)
  9. const static int size = CHAR_BIT * sizeof(int);
  10. // 循环执行i--和n >>= 1。i--移动到数组的前一个元素,n >>= 1使n中的所有位向右移动一个位置。进入下一轮迭代时,循环中处理的是n中新的最右端的值。然后,把该值储存在倒数第3个元素中,以此类推。itobs()函数用这种方式从右往左填充数组。
  11. for (i = size - 1 ; i >= 0; i--, n >>= 1)
  12. ps[i] = (01 & n) + '0';
  13. // ↑ 01是一个八进制的掩码
  14. //用01 & n和1 & n都可以,我们用八进制而不是二进制是为了更接近计算机的表达方式
  15. ps[size] = '\0';
  16. return ps;
  17. }
  18. // 4位一组显示二进制字符串
  19. void show_bstr(const char * str)
  20. {
  21. int i = 0;
  22. while (str[i])
  23. {
  24. putchar(str[i]);
  25. // 每4位打印一个空格
  26. if (++i % 4 == 0 && str[i])
  27. putchar(' ');
  28. }
  29. return;
  30. }
  31. int main(void)
  32. {
  33. char bin_str[CHAR_BIT * sizeof(int) + 1];
  34. // +1是为了留一个位置储存末尾的空字符
  35. int number;
  36. puts("Enter integers and see them in binary.");
  37. puts("Non-numeric input terminates program.");
  38. while (scanf("%d", &number) == 1)
  39. {
  40. itobs(number, bin_str);
  41. printf("%d is", number);
  42. show_bstr(bin_str);
  43. putchar('\n');
  44. }
  45. puts("Bye!");
  46. return 0;
  47. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注