c语言字符转化为运算符,c语言位运算符处理程序(二进制转换函数、十进制用二进制字符输出函数)...

# include # define SIZE 33

void str_bstr(char * st);//函数在main下边需要申明一下

char * del_space(char * st);

int btoi(char * st);

void print_bstr(unsigned int n);

int main(int argc , char * argv[])//需要在运行程序时输入两个二进制的字符串

//int main(void)

{

//char argv[3][SIZE]; //= {"strbin_test" , "a0101b" , "341010"};

int num1 , num2 ;

if (argc != 3)

{

fputs("参数错误", stderr);

exit(1);

}

str_bstr(argv[1]) ;

str_bstr(argv[2]) ;

num1 = btoi(del_space(argv[1]));

num2 = btoi(del_space(argv[2]));

printf("~%s == " ,argv[1]);

print_bstr(~num1);

putchar('\n');

printf("~%s == " ,argv[2]);

print_bstr(~num2);

putchar('\n');

printf("%s & %s == " , argv[1] , argv[2]);

print_bstr(num1 & num2);

putchar('\n');

printf("%s | %s == " , argv[1] , argv[2]);

print_bstr(num1 | num2);

putchar('\n');

printf("%s ^ %s == " , argv[1] , argv[2]);

print_bstr(num1 ^ num2);

putchar('\n');

return 0 ;

}

void str_bstr(char * str)//得到二进制的数,遇到>1的数和非数字停止输入

{

int n = 0 ; //当前索引位置

char ch ;

for (int i = 0 ; str[i]; i++)

if((isdigit(str[i]) && str[i] < '2') )

{

ch = str[n] ;

str[n] = str[i] ;

str[i] = ch ;

n++ ;

}

str[n] = '\0' ;//字符串后加结束符

}

//删除字符串中的空格

char * del_space(char * st)

{

int i = 0 ;

char * find = NULL ;

while (find = strchr(st , ' '))

{

for (i = 0 ; find[i] ; i++)

find[i] = find[i + 1] ;

}

return st ;

}

//将二进制字符串转换为十进制

int btoi(char * st)

{

int number = 0 ;

for (int i = 0 ; st[i] ; i++)

{

number <<= 1 ;

number |= (st[i] - '0');

}

return number ;

}

//把十进制数用使用递归方式使他反序打印出二进制字符

void print_bstr(unsigned int n)

{

static long loop = 0;//静态变量在程序运行时只进行一次初始化,下次使用直接用计算后的值

//如果形参是0,直接输出0,不进行递归

if (!loop && !n)

{

putchar('0');

return ;

}

if (n)

{

loop++ ;

print_bstr(n / 2) ;

}

else

return ;

putchar('0' + (n % 2));

if ((--loop % 4)== 0)//第输出4个字符,打印一个空格

putchar(' ');

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值