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

//编写一个程序,通过命令行参数读取两个二进制字符串,对这两个二进制数使用~运算符,&运算符,|运算符
//和^运算符,并以二进制字符串形式打印结果(如果无法使用命令行环境 , 可以通过交互式让程序读取字符串)

# include 
# include 
# include 
# include 
# 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(' ');
}

 

你可能感兴趣的:(Linux下嵌入式C语言开发)