Question

In: Computer Science

i need to convert decimal to twos complement binary and then add the binary digits but...

i need to convert decimal to twos complement binary and then add the binary digits but I am unable to do it. I am only allowed to use string, can anyone help me out please. i need the code urgently.

#include
#include
#include
#include

using namespace std;


string reverse(string s)
{
string x = "";
for (long i = s.length() - 1; i >= 0; i--)
{
x += s[i];
}
return x;
}
string twosComplementStringsAddition(string A, string B)
{
string c;
int count = 0;
for (int i = 0; i < A.length(); i++)
{
string c;
c.resize(A.length());
if (count > 0)
c[i] = '1';
else if (A[i] == '1' & B[i] == '1')
{
c[i] = '0';
count++;
}
else if ((A[i] == '1' & B[i] == '0') || (A[i] == '0' & B[i] == '1'))
c[i] = '1';
else if (A[i] == '0' & B[i] == '0')
c[i] = '0';
count = 0;
}
return c;
}
string negative(string a)
{
for (int i = 0; i < a.length(); i++)
{
if (a[i] == '1')
a[i] = '0';
else
a[i] = '1';
}
reverse(a);
string x = "1";
twosComplementStringsAddition(a, x);
reverse(a);
return a;
}
string decimalToTwosComplementString(int a, int L)
{
{
  
for (int i = L - 1; i >= 0; i--)
{
int k = a >> i;
if (k & 1)
cout << "1";
else
cout << "0";
}
}
string s = " ";
L = s.length();
int b;
for (int i = 0; i < L - 1; i++)
{
b = a % 2;
if (b == 1)
s[i] = '1';
else if (b == 0)
s[i] = '0';
a = a / 2;
}
reverse(s);
if (a < 0)
{
negative(s);
return s;
}
else
return s;
}
int twosComplementStringToDecimal(string a)
{
int result = 0;
if (a[0] == '0')
{
reverse(a);
for (int i = 0; i < a.length(); i++)
{
if (a[i] == '1')
{
result = result + pow(2, static_cast(i));
}
else if (a[i] == '0')
{
result = result + 0;
}
}
}
else
{
negative(a);
int resulta = 0;
reverse(a);
for (int i = 0; i < a.length(); i++)
{
if (a[i] == '1')
{
resulta = resulta + pow(2, static_cast(i));
}
else if (a[i] == '0')
{
resulta = resulta + 0;
}
}
return resulta;
}
return result;
}
int main()
{
   //Read in the bit pattern size
   int L;
   do
   {
       cout << "Enter positive integer for the bit pattern size ";
       cin >> L;
   } while (L <= 0);

   //Read in two integers a and b
   int a, b;
   cout << "Enter an integer a ";
   cin >> a;
   cout << "Enter an integer b ";
   cin >> b;

   //Calculate the decimal arithmetic sum of a and b and print the result
   int c1 = a + b;
   cout << "In decimal " << a << " + " << b << " is " << c1 << endl;

   //Compute the two's complement representations of a and b
   //Each integer must be represented in L-bits pattern
   //Also these two's complement representations must be returned as string data types
   string A = decimalToTwosComplementString(a, L);
   string B = decimalToTwosComplementString(b, L);

   //Print the two's complement representations of a and b
   cout << "The two's complement of " << a << " is\t " << A << endl;
   cout << "The two's complement of " << b << " is\t " << B << endl;

   //Compute the binary sum of the two's complement representations of a and b
   //The result must be returned as L-bit pattern string data type
   string C = twosComplementStringsAddition(A, B);

   //Print the two's complement representation binary sum
   cout << "The binary sum of " << A << " and " << B << " is " << C << endl;

   //Convert the two's complement representation binary sum to decimal and print
   int c2 = twosComplementStringToDecimal(C);
   cout << "In two's complement arithmetic, " << a << " + " << b << " is " << c2 << endl;

   //Print some concluding results
   if (c1 == c2)
       cout << c1 << " is equal to " << c2 << ". Good Job!" << endl;
   else
   {
       cout << c1 << " is not equal to " << c2 << endl;
       cout << "Either " << c1 << " cannot be represented by the given bit pattern OR we have made a mistake!" << endl;
   }
   system("Pause");
   return 0;
}

Solutions

Expert Solution

Working code implemented in C++ and appropriate comments provided for better understanding.

Source Code:

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

//Helper function:convert the original decimal number to unsigned binary number.
string decimalToUnsign(int a, int L)
{
   string result = "";
   int r;
   while (a>0)
   {
       r = a%2;
       if(r == 1)
           result = "1" + result;
       else
           result = "0" + result;
       a /= 2;
   }
   int n = result.length();

   if (L >= n) {
       for(int i=0; i<L-n; i++)
           result = "0" + result;
          
   }
   else
   {
       string temp ="";
       for(int j = n-L; j < n; j++)
           temp += result[j];
       result = temp;
   }

   return result;
}

//Function 1
string decimalToTwosComplementString(int a, int L)
{
   string result = "";
  
   if (a >= 0) {
       result = decimalToUnsign(a, L);
   }
   else
   {
       a = a * -1;
       result = decimalToUnsign(a, L);
       //flip
       string temp ="";
       for(int k=0; k<L; k++)
       {
          
           if (result[k]=='0')
               temp += "1";
           else
               temp += "0";
       }
       result = temp;
       //add 1
       string temp1 = "";
       for(int i = L-1; i>=0; i--)
       {
           if (result[i] == '0')
           {
               temp1 = "1" + temp1;
               break;
           } else {

               temp1 += "0";
           }  
       }
       int size = temp1.length();
       for(int i=L-size-1; i>=0; i--)
       {
           temp1 = result[i] + temp1;
       }
       result = temp1;
   }
   return result;
}

//Function 2
int twosComplementStringToDecimal(string C)
{
   int num = 0;
  
   if (C[0] == '0')
   {
       int index = 0;
       for(int i= C.length()-1; i>=0; i--)
       {
           if(C[C.length()-1] == '1' && i == C.length()-1)
               num = 1;

           else if(C[i] == '1')
           {
               int temp = 1;
               for(int j = 0; j<index; j++)
                   temp *= 2;
               num += temp;
           }
           index++;
       }
   }
   else
   {
       string st ="";
       for(int k=0; k < C.length(); k++)
       {
           if (C[k]=='0')
               st += "1";
           else
               st += "0";
       }

       C = st;
      
       //add 1
       string temp1 = "";
       for(int i = C.length()-1; i>=0; i--)
       {
           if (C[i] == '0')
           {
               temp1 = "1" + temp1;
               break;
           }
           else
           {
               temp1 += "0";
           }  
       }
       int size = temp1.length();
       for(int i=C.length()-size-1; i>=0; i--)
       {
           temp1 = C[i] + temp1;
       }

       C = temp1;

       int index = 0;
       for(int i= C.length()-1; i>=0; i--)
       {
           if(C[C.length()-1] == '1' && i == C.length()-1)
               num = 1;

           else if(C[i] == '1')
           {
               int temp = 1;
               for(int j = 0; j<index; j++)
                   temp *= 2;
               num += temp;
           }
           index++;
       }
       num*= -1;
   }
   return num;
}

//Function 3
string twosComplementStringsAddition(string A, string B)
{
return decimalToTwosComplementString(twosComplementStringToDecimal(A) + twosComplementStringToDecimal(B), A.length());
}

//Main function code provided by Mr.Koopa :)
int main()
{
   //Read in the bit pattern size
   int L;
   do
   {
       cout << "Enter positive integer for the bit pattern size ";
       cin >> L;
   }while (L <= 0);

   //Read in two integers a and b
   int a, b;
   cout << "Enter an integer a ";
   cin >> a;
   cout << "Enter an integer b ";
   cin >> b;

   //Calculate the decimal arithmetic sum of a and b and print the result
   int c1 = a + b;
   cout << "In decimal " << a << " + " << b << " is " << c1 << endl;

   //Compute the two's complement representations of a and b
   //Each integer must be represented in L-bits pattern
   //Also these two's complement representations must be returned as string data types
   string A = decimalToTwosComplementString(a, L);
   string B = decimalToTwosComplementString(b, L);

   //Print the two's complement representations of a and b
   cout << "The two's complement of " << a << " is\t " << A << endl;
   cout << "The two's complement of " << b << " is\t " << B << endl;

   //Compute the binary sum of the two's complement representations of a and b
   //The result must be returned as L-bit pattern string data type
   string C = twosComplementStringsAddition(A, B);

   //Print the two's complement representation binary sum
   cout << "The binary sum of " << A << " and " << B << " is " << C << endl;

   //Convert the two's complement representation binary sum to decimal and print
   int c2 = twosComplementStringToDecimal(C);
   cout << "In two's complement arithmetic, " << a << " + " << b << " is " << c2 << endl;

   //Print some concluding results
   if (c1 == c2)
       cout << c1 << " is equal to " << c2 << ". Good Job!" << endl;
   else
   {
       cout << c1 << " is not equal to " << c2 << endl;
       cout << "Either " << c1 << " cannot be represented by the given bit pattern OR we have made a mistake!" << endl;
   }
   system("Pause");
   return 0;
}

Sample Output Screenshots:


Related Solutions

Convert decimal +47 and +31 to binary, using the signed-2’s-complement representation and enough digits to accommodate...
Convert decimal +47 and +31 to binary, using the signed-2’s-complement representation and enough digits to accommodate the numbers. Then perform the binary equivalent of (+31)+(-47), (-31)+(+47), and (-31)+(-47). Convert the answers back to decimal and verify that they are correct.
(a) Convert the decimal numbers, 70 and -26 to binary in the signed 2’s complement system....
(a) Convert the decimal numbers, 70 and -26 to binary in the signed 2’s complement system. Make sure there are enough digits in the results to be able to perform arithmetic operations with these two numbers. (b) Perform in the signed 2’s complement system, (+70) + (-26) (c) Perform in the signed 2’s complement system, (-70) - (-26) (d) Perform in the signed 2’s complement system, (+70) + (+26)
1.convert the following numbers from decimal to binary assuming seven-bit twe's complement binary representation: a)49 b)...
1.convert the following numbers from decimal to binary assuming seven-bit twe's complement binary representation: a)49 b) -27 c)0 d) -64 e) -1 f) -2 g) what is the range for this computer as written in binary and in decimal? 2.convert the following numbers from decimal to binary assuming nine-bit twe's complement binary representation: a)51 b) -29 c) -2 d)0 e) -256 f) -1 g ) what is the range for this computer as written in binary and in decimal?
convert fraction decimal number 14/13 to acorrectly rounded binary number with 8 digits.
convert fraction decimal number 14/13 to acorrectly rounded binary number with 8 digits.
Design a 9’s complement of a Binary Coded Decimal
Design a 9’s complement of a Binary Coded Decimal
Convert the decimal number, 315.56 into binary form?
Convert the decimal number, 315.56 into binary form?
Problem: Convert the following binary number to decimal. 1. 110101.101 Problem: Convert the following decimal number...
Problem: Convert the following binary number to decimal. 1. 110101.101 Problem: Convert the following decimal number to fractional binary representation. 1. 103.5625
Convert the following binary number to dotted decimal format. 11000000100110010000100101011001
Convert the following binary number to dotted decimal format. 11000000100110010000100101011001
Binary How is 00001001 (base 2) represented in 8-bit two’s complement notation? Convert 0.3828125 to binary...
Binary How is 00001001 (base 2) represented in 8-bit two’s complement notation? Convert 0.3828125 to binary with 4 bits to the right of the binary point. How is 00110100 (base 2) represented in 8-bit one's complement.  
2) Show 4 digits to the right of the radix point. a) Convert 94.8710 to binary....
2) Show 4 digits to the right of the radix point. a) Convert 94.8710 to binary. Show your work. b) Convert 101101.111 to decimal. Show your work.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT