#include <iostream>
using namespace std;


int main() 
{
  // different ways to specify 25
  int value1 = 25;
  int value2 = 0b11001;  // 0b.. binary
  int value3 = 0x19;     // 0x.. hex
  int value4 = 031;      // 0... octal

  // all display 25
  cout << "from base 10: " << value1 << endl;
  cout << "from base  2: " << value2 << endl;
  cout << "from base 16: " << value3 << endl;
  cout << "from base  8: " << value4 << endl;

  // displaying 25 in different bases
  // * once hex is put in cout it will print in hex until oct or dec shows up
  // * no option for binary

  cout << hex;
  cout << value1 << ", " << value2 << ", " value3 << ", " << value4 << endl;     // 19 (hex versions of 25)
  cout << oct;
  cout << value1 << ", " << value2 << ", " value3 << ", " << value4 << endl;     // 31 (oct versions of 25)
  cout << dec;
  cout << value1 << ", " << value2 << ", " value3 << ", " << value4 << endl;     // 25 (dec versions of 25)

  char upper = 'A';
  cout << "upper: " << upper << endl;

  // same effect since using same mask (once in binary, once in hex)
  char lower1 = upper | 0b00100000;   // 20 in hex
  char lower2 = upper | 0x20;

  cout << "lower1: " << lower1 << endl;
  cout << "lower2: " << lower2 << endl;
  
  return 0;
}