A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© why19910522 中级黑马   /  2015-8-8 23:21  /  542 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. void printBinary(int m){
  2. //    提示用户输入一个数
  3.      printf("打印一个数的二进制原码\n请输入一个数:\n");
  4. //        判断输入的数是否是数字,如果不是则使用getchar函数将缓冲区里的无效字符取出来,并重新输入
  5.       while (!(scanf("%d",&m))) {
  6.              while (getchar()!='\n');
  7.              printf("输入错误!请重新输入:\n");
  8.      }
  9. //    当输入正数时,打印其二进制原码
  10.      if (m >= 0){
  11.          for (int i = 8*sizeof(int)-1; i >= 0; i--) {
  12. //      让数右移i位,并与1进行与运算,然后打印结果
  13.                 printf("%d",((m>>i)&1));
  14. //          每打印8位就打印一个空格
  15.                if (0 == i%8) {
  16.                      printf(" ");
  17.               }
  18.         }
  19.     }else{
  20. //      当输入负数时,打印其二进制原码
  21.              for (int i = 8*sizeof(int)-1; i >= 0; i--) {
  22. //            让最高位,既符号位永远打印1
  23.                       if (8*sizeof(int)-1  == i){
  24.                             printf("1");
  25.                      }else {
  26. //              让这个负数取反并加1既将这个负数的负号去掉,然后再去右移i位并和1进行与运算,然后打印
  27.                              printf("%d",(((~m+1)>>i)&1));
  28.                      }
  29. //            让最高位,既符号位永远打印1
  30.                     if (0 == i%8) {
  31.                              printf(" ");
  32.                     }
  33.             }
  34.       }
复制代码

2 个回复

倒序浏览
32个赞
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马