黑马程序员技术交流社区

标题: 想问问下面程序? [打印本页]

作者: ★彬★卍囧神    时间: 2014-5-12 18:32
标题: 想问问下面程序?
/*
编写一个函数输出整数的二进制形式?
*/

#include <stdio.h>
void erzhuan(int n );  //整数转二进制函数转换函数申明
int main()
{        int a;
        printf("请输入一个整数:\n");
        scanf("%d",&a);
        erzhuan(a);
        return 0;

}

void erzhuan(int n )
{
        int number =  (sizeof (int) << 3) - 1 ;  //调用sizeof函数算字节数
        for( int h;number >= 0; number--)
        {       
                if( (number+1) % 4 == 0)        {                //每4个就空格一次
                        printf(" ");   }
                                h=n>>number&1;                                //右移动number个单位
                                printf("%d",h);
                               
        }
        printf("\n");
}
运行结果:



最前面的空格怎么去掉.


QQ截图20140512182634.png (19 KB, 下载次数: 43)

QQ截图20140512182634.png

作者: 兰闻天    时间: 2014-5-12 20:28
本帖最后由 兰闻天 于 2014-5-12 20:40 编辑
  1. void erzhuan(int n )
  2. {
  3.         int number =  (sizeof (int) << 3) - 1 ;  //调用sizeof函数算字节数
  4.         for( int h;number >= 0; number--)
  5.         {        
  6.                 if( (number+1) % 4 == 0 && (number + 1!= 31))        {                //每4个就空格一次且第一个去除
  7.                         printf(" ");   }
  8.                                 h=n>>number&1;                                //右移动number个单位
  9.                                 printf("%d",h);
  10.                                 
  11.         }
  12.         printf("\n");
  13. }
复制代码

作者: 时雨    时间: 2014-5-12 20:33
0除4也余0,加上一个判断条件且number!=0就行了吧
作者: 为梦想挺身而出    时间: 2014-5-12 21:14

  1. /*
  2. 编写一个函数输出整数的二进制形式?
  3. */

  4. #include <stdio.h>
  5. void erzhuan(int n );  //整数转二进制函数转换函数申明
  6. int main()
  7. {        int a;
  8.     printf("请输入一个整数:\n");
  9.     scanf("%d",&a);
  10.     erzhuan(a);
  11.     return 0;
  12.    
  13. }

  14. void erzhuan(int n )
  15. {
  16.     int number =  (sizeof (int) << 3) - 1 ;  //调用sizeof函数算字节数
  17.     int a = number; // 加个变量,初始化等于number
  18.     for( int h;number >=0; number--)
  19.     {
  20.         h=n>>number&1;  // 在没有判断之前先计算输出
  21.         printf("%d",h);
  22.         
  23.         if(number% 4 == 0 )//这里的number从31开始,第一次就不会有空格了
  24.         {                //每4个就空格一次
  25.             printf(" ");
  26.         }
  27.       
  28.         
  29.     }
  30.     printf("\n");
  31. }
复制代码


下面是我之前写的,用while看着更舒服
  1. void printBinary(int number)
  2. {
  3.     //记录现在挪到第几位,默认31
  4.     //右移
  5.     //减号的优先级大于左移
  6.     int temp =(sizeof(number)<<3)-1;
  7.     while (temp>=0)
  8.     {   int value = number>>temp & 1;
  9.         
  10.         
  11.         
  12.         printf("%d",value);
  13.         
  14.         
  15.         if(temp%4 ==0)
  16.         {
  17.             printf(" ");
  18.         }
  19.         
  20.         temp--;
  21.     }
  22.     printf("\n");
  23. }
复制代码

作者: Freedam    时间: 2014-5-13 01:25
  1. #include <stdio.h>
  2. void erzhuan(int n );  //整数转二进制函数转换函数申明
  3. int main()
  4. {        int a;
  5.     printf("请输入一个整数:\n");
  6.     scanf("%d",&a);
  7.     erzhuan(a);
  8.     return 0;
  9.    
  10. }

  11. void erzhuan(int n )
  12. {
  13.     int n1 = 0;
  14.     int number =  (sizeof (int) << 3) - 1 ;  //调用sizeof函数算字节数
  15.     for( int h;number >= 0; number--)
  16.     {
  17. //        if( (number+1) % 4 == 0)        {                //每4个就空格一次
  18. //            printf(" ");   }
  19.         if(n1 != 0 && n1 % 4 == 0)
  20.             printf(" ");
  21.         h=n>>number&1;
  22.         //右移动number个单位
  23.         n1++;
  24.         printf("%d",h);
  25.         
  26.     }
  27.     printf("\n");
  28. }
复制代码

作者: ★彬★卍囧神    时间: 2014-5-13 12:00
兰闻天 发表于 2014-5-12 20:28

学会这招了,谢谢!!!这里(number + 1!= 32)
作者: ★彬★卍囧神    时间: 2014-5-13 12:16
为梦想挺身而出 发表于 2014-5-12 21:14
下面是我之前写的,用while看着更舒服

恩恩,这个我知道




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2