黑马程序员技术交流社区

标题: 二进制的输出 [打印本页]

作者: godlike    时间: 2014-5-3 08:56
标题: 二进制的输出
c语言没有直接输出一个数二进制的占位符;所以得自己写
这是老师在视频里讲的:
  1. //右移31位,从最高为开始和1做&运算,得到每一位的二进制数值
  2. void printbinry(int num)
  3. {
  4.     int count = (sizeof(num)<<3)-1;//值为31
  5.     while (count>=0) {
  6.         int bitnum = num>>count; //除去符号位,从最高位开始得到每一位
  7.         int byte = bitnum & 1; //和1进行与运算得到每一位的二进制数
  8.         printf("%d",byte);
  9.         
  10.         if (count%4==0) {//每隔四位打印空格
  11.             printf(" ");
  12.         }
  13.         
  14.         count--;
  15.     }
  16.     printf("\n");
  17.    
复制代码


但是网上说还有一种方法是用c自带的itoa方法,在头文件<stdlib.h>中:
itoa(int value, char *str, int radix); 参数分别表示:
value:要转换的数字;
str:是一个字符串,存储转换后的进制;
radix:要转换的进制
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.    
  6.     int a = 10;
  7.     char str[100];
  8.     itoa(a,str,2);
  9.    
  10.     printf("%s\n", str);
  11.    
  12.     return 0;
  13. }
复制代码

但是会报错:clang: error: linker command failed with exit code 1 (use -v to see invocation)
是xcode编译器的问题吗
作者: 兰闻天    时间: 2014-5-3 10:16
你自己找到<stdlib.h>头文件看看,有没有 itoa(int value, char *str, int radix);我在xcode里引入了头文件,可是打itoa没有提示,应该是没有这个函数
作者: 张秋月    时间: 2014-5-3 13:34
itoa不是c标准库的,有的编译环境有,有的则没有。
windows上边的编译器应该有这个函数,而mac上边应该没有。
给你直接找到一个实现,你放到自己代码里面就可以了
  1. void itoa (unsigned long val, char *buf, unsigned radix)
  2. {
  3.     char *p;           /* pointer to traverse string */
  4.     char *firstdig;    /* pointer to first digit */
  5.     char temp;         /* temp char */
  6.     unsigned digval;   /* value of digit */
  7.    
  8.     p = buf;
  9.     firstdig = p;      /* save pointer to first digit */
  10.    
  11.     do
  12.     {
  13.         digval = (unsigned)(val % radix);
  14.         val /= radix;  /* get next digit */
  15.         
  16.         /* convert to ascii and store */
  17.         if (digval > 9)
  18.             *p++ = (char)(digval - 10 + 'a'); /* a etter */
  19.         else
  20.             *p++ = (char)(digval + '0');      /* a digit */
  21.     }
  22.     while (val > 0);
  23.    
  24.     /* We now have the digit of the number in the buffer, but in reverse order. Thus we reverse them now. */
  25.    
  26.     *p-- = '\0';  /* terminate string; p points to last digit */
  27.    
  28.     do
  29.     {
  30.         temp = *p;
  31.         *p = *firstdig;
  32.         *firstdig = temp;  /* swap *p and *firstdig */
  33.         --p;
  34.         ++firstdig;                   /*   advance   to   next   two   digits   */
  35.     }
  36.     while (firstdig < p);   /* repeat until halfway */
  37. }
复制代码





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