代码如下
#include
#include
#include
#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"; // X补码为11.0011
char str_Y[MAX_LENGTH] = "010110"; // y补码为0.1011末位添0附加位
int len = strlen(str_X);
// ACC 初始为0
// MQ初始为Y
for (int i=0; i < len; i++)
MQ[i] = str_Y[i] - '0';
// X存放X
for (int i=0; i < len; i++)
X[i] = str_X[i] - '0';
// Negative_X 存放-X
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;
}