在C语言中实现二进制数的自加(即二进制加法),可以通过以下步骤完成。这里提供两种方法: 位运算实现和 字符数组实现。
一、位运算实现二进制加法
位运算是实现二进制加法的高效方法,通过逐位异或(`^`)计算无进位和,与与运算(`&`)计算进位,再通过左移操作实现进位叠加。
示例代码:
```c
include
unsigned int binaryAddition(unsigned int a, unsigned int b) {
unsigned int carry = 0;
unsigned int result = 0;
while (a != 0 || b != 0 || carry != 0) {
// 计算无进位和
unsigned int sum = a ^ b;
// 计算进位
carry = (a & b) << 1;
// 更新结果
a = sum;
b = carry;
}
return result;
}
int main() {
unsigned int num1, num2, sum;
printf("输入第一个二进制数(十进制):");
scanf("%u", &num1);
printf("输入第二个二进制数(十进制):");
scanf("%u", &num2);
sum = binaryAddition(num1, num2);
printf("二进制加法结果(十进制):%un", sum);
printf("二进制加法结果(二进制):%un", sum); // 以二进制形式输出
return 0;
}
```
说明:
函数`binaryAddition` :接受两个无符号整数`a`和`b`,通过循环计算无进位和与进位,直到没有进位为止。位运算逻辑
- `sum = a ^ b`:计算无进位和(相同为0,不同为1)
- `carry = (a & b) << 1`:计算进位(1&1得1,左移一位)
主函数:
读取用户输入的两个十进制数,调用`binaryAddition`函数计算结果,并输出十进制和二进制形式。
二、字符数组实现二进制加法
通过字符数组存储二进制字符串(如"1010"),模拟手动加法过程,适用于处理固定长度的二进制数。
示例代码:
```c
include include void binaryAddition(char *bn1, char *bn2, char *result) { int len1 = strlen(bn1); int len2 = strlen(bn2); int maxLen = len1 > len2 ? len1 : len2; int carry = 0; int i; // 将二进制字符串转换为整数进行加法 unsigned int num1 = 0, num2 = 0; for (i = 0; i < len1; i++) num1 = num1 * 2 + (bn1[i] - '0'); for (i = 0; i < len2; i++) num2 = num2 * 2 + (bn2[i] - '0'); // 执行加法 unsigned int sum = num1 + num2 + carry; carry = sum / 2; num1 = sum % 2; // 将结果转换回二进制字符串 int index = maxLen > 0 ? maxLen - 1 : 0; while (num1 > 0) { result[index] = (num1 % 2) + '0'; num1 /= 2; index--; } result[index] = '0'; // 添加字符串结束符 // 反转结果字符串 for (i = 0; i < index / 2; i++) { char temp = result[i]; result[i] = result[index - i - 1]; result[index - i - 1] = temp; } }
int main() {
char bin1, bin2, sum; // 结果数组多一位存储进位
printf("输入第一个二进制数:");
scanf("%s", bin1);
printf("输入第二个二进制数:");
scanf("%s", bin2);
binaryAddition(bin1, bin2, sum);
printf("二进制加法结果:%sn", sum);