
代码如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LENGTH 30
void bin_plus(int *A, int *B, int len);
void bin_print(int *b, int len, char c, int loc);
void bin_right(int* b, int len);
int main(void)
{
int ACC[MAX_LENGTH] = {0};
int MQ[MAX_LENGTH] = {0};
int X[MAX_LENGTH] = {0};
int Negative_X[MAX_LENGTH] = {0};
int Zero[MAX_LENGTH] = {0};
char str_X[MAX_LENGTH] = "110011";
char str_Y[MAX_LENGTH] = "010110";
int len = strlen(str_X);
for (int i=0; i < len; i++)
MQ[i] = str_Y[i] - '0';
for (int i=0; i < len; i++)
X[i] = str_X[i] - '0';
bool flag = false;
for (int i=len-1; i>=0; i--)
{
if (flag)
Negative_X[i] = !X[i];
else
Negative_X[i] = X[i];
if (X[i] == 1)
flag = true;
}
for (int i=0; i < len-1; i++)
{
bin_print(ACC, len, '\t', len-1);
bin_print(MQ, len, '\n', len-1);
int* add_num;
switch (MQ[len-1] - MQ[len-2])
{
case -1:
add_num = Negative_X;
break;
case 0:
add_num = Zero;
break;
case 1:
add_num = X;
break;
default:
break;
}
bin_print(add_num, len, '\n', len-1);
bin_plus(ACC, add_num, len);
printf("-------------------------\n");
bin_print(ACC, len, '\n', len-1);
if (i != len-2)
{
bin_right(MQ, len);
MQ[0] = ACC[len-1];
bin_right(ACC, len);
}
printf("\n");
}
printf("Answer: ");
bin_print(ACC, len, ' ', len-1);
bin_print(MQ, len-2, '\n', len-1);
return 0;
}
void bin_plus(int *A, int *B, int len)
{
int CF = 0;
for (int i = len-1; i >= 0 ; i--)
{
int temp = (A[i] & B[i]) | ((A[i] ^ B[i]) & CF);
A[i] = A[i] ^ B[i] ^ CF;
CF = temp;
}
return;
}
void bin_print(int *b, int len, char c, int loc)
{
for (int i = 0; i < len; i++)
{
printf("%d", b[i]);
if (i == loc)
printf("%c", c);
else
printf(" ");
}
return;
}
void bin_right(int* b, int len)
{
for (int i = len-1; i > 0; i--)
b[i] = b[i-1];
b[0] = b[1];
return;
}