首页 > 试题广场 >

编写一个程序,该程序用命令行参数读取两个二进制字符串,并打印

[问答题]

编写一个程序,该程序用命令行参数读取两个二进制字符串,并打印对每个数使用~运算符的结果,以及对这两个数使用&、|和^运算符的结果。使用二进制字符串形式显示结果。

推荐
#include <stdio.h>
#include <string.h>
#define M 8*sizeof(int) + 1
char* extend(char *source, char *destination);
char* reverse(char *destination, char *source);
char* and(char *destination, char *source1, char *source2);
char* or(char *destination, char *source1, char *source2);
char* exclusive_or(char *destination, char *source1, char *source2);
int main(int argc,char *argv[])
{
 char x[M],y[M],z[M];
 printf("    x = %s\n", extend(x, argv[1]) );//拓展成M位宽
 printf("    y = %s\n", extend(y, argv[2]) );
 printf("   ^x = %s\n", reverse(z,x) );
 printf("   ^y = %s\n", reverse(z,y) );
 printf("x & y = %s\n", and(z,x,y) );
 printf("x | y = %s\n", or(z,x,y) );
 printf("x ^ y = %s\n", exclusive_or(z,x,y) );
 return 0;
}
char* extend(char *destination, char *source)//将二进制字符串传给一个32位长的字符串
{
 unsigned int i;
 for(i=0; i < M-1-strlen(source); i++)
 destination[i] = '0' ;
 destination[i] = '\0' ;
 strcat(destination, source);
 return destination;
}
char* reverse(char *destination, char *source)//将二进制字符串 “取反”
{
 char *save = destination;
 strcpy(destination, source);
 while( *destination != '\0' )
 {
 if( *destination == '0' ) *destination = '1';
 else *destination = '0';
 destination++;
 }
 return save;
}
char* and(char *destination, char *source1, char *source2)//将两个二进制字符串 求与
{
 char *save = destination;
 while( *source1 != '\0' )
 {
 if( *source1 == '1' && *source2 == '1' ) *destination = '1';
 else *destination = '0';
 source1++;
 source2++;
 destination++;
 }
 return save;
}
char* or(char *destination, char *source1, char *source2)//将两个二进制字符串 求或
{
 char *save = destination;
 while( *source1 != '\0' )
 {
 if( *source1 == '1' || *source2 == '1' ) *destination = '1';
 else *destination = '0';
 source1++;
 source2++;
 destination++;
 }
 return save;
}
char* exclusive_or(char *destination, char *source1, char *source2)//将两个二进制字符串 求异或
{
 char *save = destination;
 while( *source1 != '\0' )
 {
 if( *source1 != *source2  ) *destination = '1';
 else *destination = '0';
 source1++;
 source2++;
 destination++;
 }
 return save;
}

发表于 2018-05-05 22:13:48 回复(0)