首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

偶遇 c语言 小疑点 望高手解答

2014-01-22 
偶遇 c语言 小问题 望高手解答用递归写的一个打印char类型8个bit位的数值, 输入整数 结果正常,输入负数 就

偶遇 c语言 小问题 望高手解答
用递归写的一个打印char类型8个bit位的数值, 输入整数 结果正常,输入负数 就是段错误!!!(注释掉的代码可以正常使用)。
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>

//void banary(char,int);
void banary(char);
int main()
{
char a=-128;
int i=0;
char buf[10]={};
int n=0;
while(1){
scanf("%d",&n);
getchar();
                a=n;
banary(a);
puts("");
}
}
/*void banary(char a,int n)
{
int i=0;
if(8==n) return;
banary(a>>1,++n);
printf("%d ",a&1);
}*/
void banary(char a)
{
if(a==0) return 0;////我想问题出在这里,负数不能满足判断条件,递归没有退出条件,发生了段错误。可是不明白为什么?
banary(a>>1);
printf("%d ",a&1);
}


[解决办法]
负数右移我记得C是算术右移吧,前面会补1的,所以结果是(1111 1111)2 = (-1)10
正数用的是逻辑右移,前面补0,所以最后会变成0000 0000 也就是 0
你的判断条件应该改成这种:

if(a==0
[解决办法]
a==-1)

热点排行