编写一个c语言程序,通过命令行参数读取两个二进制字符串,对这两个二进制数使用~运算符, & 运算符, | 运算符和 ^ 运算符,并以二进制字符串形式打印结果。
时间: 2024-02-27 10:58:01 浏览: 88
以下是一个实现上述要求的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
void print_binary(char *bin_str);
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s binary_str1 binary_str2\n", argv[0]);
exit(EXIT_FAILURE);
}
char *bin_str1 = argv[1];
char *bin_str2 = argv[2];
// ~ 按位取反
int num1 = ~strtol(bin_str1, NULL, 2);
int num2 = ~strtol(bin_str2, NULL, 2);
printf("~%s = ", bin_str1);
print_binary(num1);
printf("\n~%s = ", bin_str2);
print_binary(num2);
printf("\n");
// & 按位与
int and_result = strtol(bin_str1, NULL, 2) & strtol(bin_str2, NULL, 2);
printf("%s & %s = ", bin_str1, bin_str2);
print_binary(and_result);
printf("\n");
// | 按位或
int or_result = strtol(bin_str1, NULL, 2) | strtol(bin_str2, NULL, 2);
printf("%s | %s = ", bin_str1, bin_str2);
print_binary(or_result);
printf("\n");
// ^ 按位异或
int xor_result = strtol(bin_str1, NULL, 2) ^ strtol(bin_str2, NULL, 2);
printf("%s ^ %s = ", bin_str1, bin_str2);
print_binary(xor_result);
printf("\n");
return 0;
}
// 将整数以二进制字符串形式输出
void print_binary(char *bin_str) {
int num = strtol(bin_str, NULL, 2);
printf("%d (0b%s)", num, bin_str);
}
void print_binary(int num) {
int bits = sizeof(num) * 8;
char bin_str[MAX_LEN];
memset(bin_str, 0, MAX_LEN);
// 将整数转换为二进制字符串
for (int i = bits - 1; i >= 0; i--) {
if ((num >> i) & 1) {
strcat(bin_str, "1");
} else {
strcat(bin_str, "0");
}
}
printf("%d (0b%s)", num, bin_str);
}
```
在命令行中运行程序,例如:
```
$ ./binary_ops 1010 1100
~1010 = -11 (0b11110101)
~1100 = -13 (0b11110100)
1010 & 1100 = 1000 (0b00001000)
1010 | 1100 = 1110 (0b00001110)
1010 ^ 1100 = 110 (0b00000110)
```
程序会按照要求输出两个二进制字符串的按位取反、按位与、按位或和按位异或的结果。
阅读全文