黑马程序员技术交流社区
标题:
二进制的输出
[打印本页]
作者:
godlike
时间:
2014-5-3 08:56
标题:
二进制的输出
c语言没有直接输出一个数二进制的占位符;所以得自己写
这是老师在视频里讲的:
//右移31位,从最高为开始和1做&运算,得到每一位的二进制数值
void printbinry(int num)
{
int count = (sizeof(num)<<3)-1;//值为31
while (count>=0) {
int bitnum = num>>count; //除去符号位,从最高位开始得到每一位
int byte = bitnum & 1; //和1进行与运算得到每一位的二进制数
printf("%d",byte);
if (count%4==0) {//每隔四位打印空格
printf(" ");
}
count--;
}
printf("\n");
复制代码
但是网上说还有一种方法是用c自带的itoa方法,在头文件<stdlib.h>中:
itoa(int value, char *str, int radix); 参数分别表示:
value:要转换的数字;
str:是一个字符串,存储转换后的进制;
radix:要转换的进制
#include <stdlib.h>
#include <stdio.h>
int main()
{
int a = 10;
char str[100];
itoa(a,str,2);
printf("%s\n", str);
return 0;
}
复制代码
但是会报错: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上边应该没有。
给你直接找到一个实现,你放到自己代码里面就可以了
void itoa (unsigned long val, char *buf, unsigned radix)
{
char *p; /* pointer to traverse string */
char *firstdig; /* pointer to first digit */
char temp; /* temp char */
unsigned digval; /* value of digit */
p = buf;
firstdig = p; /* save pointer to first digit */
do
{
digval = (unsigned)(val % radix);
val /= radix; /* get next digit */
/* convert to ascii and store */
if (digval > 9)
*p++ = (char)(digval - 10 + 'a'); /* a etter */
else
*p++ = (char)(digval + '0'); /* a digit */
}
while (val > 0);
/* We now have the digit of the number in the buffer, but in reverse order. Thus we reverse them now. */
*p-- = '\0'; /* terminate string; p points to last digit */
do
{
temp = *p;
*p = *firstdig;
*firstdig = temp; /* swap *p and *firstdig */
--p;
++firstdig; /* advance to next two digits */
}
while (firstdig < p); /* repeat until halfway */
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2