// This is derived from the code of example 16.7 from Deitel & Deitel

#include <iostream>
#include <iomanip>
using std::cout;
using std::cin;
using std::endl;
using std::setw;

void displayBits(unsigned value)
{
    const int numBits = 8 * sizeof(unsigned);
    
    cout << setw(10) << value << " = ";

    unsigned mask = 1 << (numBits - 1);
    for (int i = 0; i < numBits; i++)
    {
        cout << (value & mask ? '1' : '0');
        mask >>= 1;
        if ((i + 1) % 8 == 0) 
            cout << ' ';
    }

    cout << endl;
}

int main()
{
    while (1)
    {
        unsigned number1;
        cout << "********************************" << endl;
        cout << "Enter a positive integer" << endl;
        cin >> number1;
        cout << "You entered " << number1 << endl; // what happens if error?

        unsigned mask = 41;
        cout << "The result of combining the following\n";
        displayBits( number1 );
        displayBits( mask );
        cout << "using the bitwise AND operator & is\n";
        displayBits( number1 & mask );

        unsigned setBits = 241;
        cout << "\nThe result of combining the following\n";
        displayBits( number1 );
        displayBits( setBits );
        cout << "using the bitwise inclusive OR operator | is\n";
        displayBits( number1 | setBits );
        
        unsigned number2 = 199;
        cout << "\nThe result of combining the following\n";
        displayBits( number1 );
        displayBits( number2 );
        cout << "using the bitwise exclusive OR operator ^ is\n";
        displayBits( number1 ^ number2 );
        
        cout << "\nThe one's complement of\n";
        displayBits( number1 );
        cout << "is" << endl;
        displayBits( ~number1 );
    }
    
    return 0;
}


