function
add(ac, x, qrn)
{
let c = 0;
for
(let i = 0; i < qrn; i++)
{
ac[i] = ac[i] + x[i] + c;
if
(ac[i] > 1)
{
ac[i] = ac[i] % 2;
c = 1;
}
else
c = 0;
}
}
function
complement(a, n)
{
let x =
new
Array(8).fill(0);
x[0] = 1;
for
(let i = 0; i < n; i++)
a[i] = (a[i] + 1) % 2;
add(a, x, n);
}
function
rightShift(ac, qr, qn, qrn)
{
let temp = ac[0];
qn = qr[0];
process.stdout.write(
"\t\trightShift\t"
);
for
(let i = 0; i < qrn - 1; i++)
{
ac[i] = ac[i + 1];
qr[i] = qr[i + 1];
}
qr[qrn - 1] = temp;
}
function
display(ac, qr, qrn)
{
for
(let i = qrn - 1; i > -1; i--)
process.stdout.write(ac[i] +
""
);
process.stdout.write(
"\t"
);
for
(i = qrn - 1; i > -1; i--)
process.stdout.write(qr[i] +
""
);
}
function
boothAlgorithm(br, qr, mt, qrn, sc)
{
let qn = 0;
let ac =
new
Array(10).fill(0);
let temp = 0;
process.stdout.write(
"qn\tq[n+1]\t\tBR\t\tAC\tQR\t\tsc\n"
);
process.stdout.write(
"\t\t\tinitial\t\t"
);
display(ac, qr, qrn);
process.stdout.write(
"\t\t"
+ sc +
"\n"
);
while
(sc != 0)
{
process.stdout.write(qr[0] +
"\t"
+ qn);
if
((qn + qr[0]) == 1)
{
if
(temp == 0)
{
add(ac, mt, qrn);
process.stdout.write(
"\t\tA = A - BR\t"
);
for
(let i = qrn - 1; i > -1; i--)
process.stdout.write(ac[i] +
""
);
temp = 1;
}
else
if
(temp == 1)
{
add(ac, br, qrn);
process.stdout.write(
"\t\tA = A + BR\t"
);
for
(i = qrn - 1; i > -1; i--)
process.stdout.write(ac[i] +
""
);
temp = 0;
}
process.stdout.write(
"\n\t"
);
rightShift(ac, qr, qn, qrn);
}
else
if
(qn - qr[0] == 0)
rightShift(ac, qr, qn, qrn);
display(ac, qr, qrn);
process.stdout.write(
"\t"
);
sc -= 1;
process.stdout.write(
"\t"
+ sc +
"\n"
);
}
}
let mt =
new
Array(10).fill(0);
let brn = 4;
let br = [ 0, 1, 1, 0 ];
for
(let i = brn - 1; i > -1; i--)
mt[i] = br[i];
br.reverse()
complement(mt, brn)
qrn = 4;
let sc = qrn;
let qr = [ 1, 0, 1, 0 ];
qr.reverse();
boothAlgorithm(br, qr, mt, qrn, sc)
process.stdout.write(
"\nResult = "
);
for
(let i = qrn - 1; i > -1; i--)
process.stdout.write(qr[i] +
""
);
process.stdout.write(
"\n"
);