用C语言1. 编写一个程序,通过命令行参数读取两个二进制字符串,对这两个二进制数使用~运算符,&运算符,|运算符和^运算符,并以二进制字符串形式打印结果。 ```c ``` 2.
时间: 2023-11-21 20:14:28 浏览: 96
好的,这是你的第一个问题,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 64
char* bin_not(char* bin) {
int len = strlen(bin);
char* res = (char*) malloc(len + 1);
for (int i = 0; i < len; i++) {
res[i] = (bin[i] == '0') ? '1' : '0';
}
res[len] = '\0';
return res;
}
char* bin_and(char* bin1, char* bin2) {
int len1 = strlen(bin1), len2 = strlen(bin2);
int len = (len1 > len2) ? len1 : len2;
char* res = (char*) malloc(len + 1);
for (int i = 0; i < len; i++) {
char c1 = (i < len1) ? bin1[len1 - i - 1] : '0';
char c2 = (i < len2) ? bin2[len2 - i - 1] : '0';
res[len - i - 1] = (c1 == '1' && c2 == '1') ? '1' : '0';
}
res[len] = '\0';
return res;
}
char* bin_or(char* bin1, char* bin2) {
int len1 = strlen(bin1), len2 = strlen(bin2);
int len = (len1 > len2) ? len1 : len2;
char* res = (char*) malloc(len + 1);
for (int i = 0; i < len; i++) {
char c1 = (i < len1) ? bin1[len1 - i - 1] : '0';
char c2 = (i < len2) ? bin2[len2 - i - 1] : '0';
res[len - i - 1] = (c1 == '1' || c2 == '1') ? '1' : '0';
}
res[len] = '\0';
return res;
}
char* bin_xor(char* bin1, char* bin2) {
int len1 = strlen(bin1), len2 = strlen(bin2);
int len = (len1 > len2) ? len1 : len2;
char* res = (char*) malloc(len + 1);
for (int i = 0; i < len; i++) {
char c1 = (i < len1) ? bin1[len1 - i - 1] : '0';
char c2 = (i < len2) ? bin2[len2 - i - 1] : '0';
res[len - i - 1] = (c1 != c2) ? '1' : '0';
}
res[len] = '\0';
return res;
}
int main(int argc, char* argv[]) {
if (argc != 3) {
printf("Usage: %s <binary1> <binary2>\n", argv[0]);
return 1;
}
char* bin1 = argv[1];
char* bin2 = argv[2];
char* not_res = bin_not(bin1);
char* and_res = bin_and(bin1, bin2);
char* or_res = bin_or(bin1, bin2);
char* xor_res = bin_xor(bin1, bin2);
printf("~%s = %s\n", bin1, not_res);
printf("~%s = %s\n", bin2, bin_not(bin2));
printf("%s & %s = %s\n", bin1, bin2, and_res);
printf("%s | %s = %s\n", bin1, bin2, or_res);
printf("%s ^ %s = %s\n", bin1, bin2, xor_res);
free(not_res);
free(and_res);
free(or_res);
free(xor_res);
return 0;
}
```
这个程序通过命令行参数读取两个二进制字符串,然后分别对这两个二进制数使用~运算符、&运算符、|运算符和^运算符,并以二进制字符串形式打印结果。
例如,如果你想计算二进制数"0101"和"0011"的&运算结果,你可以在命令行中输入:
```
./program 0101 0011
```
然后程序将输出:
```
~0101 = 1010
~0011 = 1100
0101 & 0011 = 0001
0101 | 0011 = 0111
0101 ^ 0011 = 0110
```
希望这个程序能够帮助你。如果你有任何问题或疑问,请随时提出。
阅读全文