示例:反转后几位

作者:追风剑情 发布于:2020-4-10 14:35 分类:C

示例:反转后几位

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. //提供CHAR_BIT的定义,CHAR_BIT表示每字节的位数
  6. #include <limits.h>
  7.  
  8. char * itobs(int, char *);
  9. void show_bstr(const char *);
  10. int invert_end(int num, int bits);
  11.  
  12. int main(int argc, char* argv[])
  13. {
  14. char bin_str[CHAR_BIT * sizeof(int) + 1];
  15. int number;
  16.  
  17. puts("Enter integers and see them in binary.");
  18. puts("Non-numeric input terminates program.");
  19. while (scanf("%d", &number) == 1)
  20. {
  21. itobs(number, bin_str);
  22. printf("%d is\n", number);
  23. show_bstr(bin_str);
  24. putchar('\n');
  25. number = invert_end(number, 4);
  26. printf("Inverting the last 4 bits gives\n");
  27. show_bstr(itobs(number, bin_str));
  28. putchar('\n');
  29. }
  30. puts("Bye!");
  31.  
  32. system("pause");
  33. return 0;
  34. }
  35.  
  36. char * itobs(int n, char * ps)
  37. {
  38. int i;
  39. const static int size = CHAR_BIT * sizeof(int);
  40. for (i = size - 1; i >= 0; i--, n >>= 1)
  41. //01代表八进制1
  42. ps[i] = (01 & n) + '0';//1 + '0' 表示 '1'
  43. ps[size] = '\0';
  44. return ps;
  45. }
  46.  
  47. void show_bstr(const char * str)
  48. {
  49. int i = 0;
  50. while (str[i]) /* 不是一个空字符 */
  51. {
  52. putchar(str[i]);
  53. if (++i % 4 == 0 && str[i])
  54. putchar(' ');
  55. }
  56. }
  57.  
  58. int invert_end(int num, int bits)
  59. {
  60. int mask = 0;
  61. int bitval = 1;
  62. while (bits-- > 0)
  63. {
  64. mask |= bitval;
  65. bitval <<= 1;
  66. }
  67. return num^mask;
  68. }

运行测试

1111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号