#include <iostream>
using namespace std;
#include "Accumulator.h"
void Accumulator::print(char const n)
{
unsigned ruler = 1; // 비트연산을 위한 피연산자
int i;
ruler <<= (intLen - 1); // 최상위 비트로 이동
cout << "현재 누산기의 값은 ";
if (n == '2') { // 2진수로 출력 (unsigned)
for (i = 0; i < intLen; i++, ruler >>= 1) {
if (value & ruler) cout << '1';
else cout << '0';
}
cout << "(2)"; // 2진수라는 표시
}
else cout << value; // 10진수로 출력
cout << " 입니다." << endl;
}
int main()
{
int num;
char menu, n;
Accumulator acc(0); // Accumulator 객체를 정의하고 0으로 초기화
while (1) {
cout << "-----------------------" << endl;
cout << "+ : 더하기\t- : 빼기" << endl;
cout << "* : 곱하기\t/ : 나누기" << endl;
cout << "< : 좌회전\t> : 우회전" << endl;
cout << "r : 0으로 재설정" << endl;
cout << "2 : 2진수로\t1 : 10진수로" << endl;
cout << "g : 값출력\tq : 종료" << endl << endl;
cout << "-----------------------" << endl;
cout << "선택하세요 : ";
cin >> menu;
switch (menu) {
case '+' :
case '=' : cout << "몇을 더할까요? : ";
cin >> num;
acc.add(num); acc.print(n);
break;
case '-' :
case '_' : cout << "몇을 뺄까요? : ";
cin >> num;
acc.sub(num); acc.print(n);
break;
case '*' :
case '8' : cout << "몇을 곱할까요? : ";
cin >> num;
acc.mul(num); acc.print( n);
break;
case '/' :
case '?' : cout << "몇으로 나눌까요? : ";
cin >> num;
acc.div(num); acc.print(n);
break;
case 'r' :
case '0' : acc.reset(); acc.print(n);
break;
case '>' :
case '.' : cout << "우로 몇비트 회전할가요? : ";
cin >> num;
acc.rotr(num); acc.print(n);
break;
case '<' :
case ',' : cout << "좌로 몇비트 회전할가요? : ";
cin >> num;
acc.rotl(num); acc.print(n);
break;
case 'g' :
case 'p' : cout << "누산기의 현재 값은 " << acc.getValue() << "입니다." << endl;
break;
case '2' :
case 'b' : n = '2'; acc.print(n);
break;
case '1' :
case 'd' : n = '1'; acc.print(n);
break;
case 'q' : return 0;
break;
}
}
return 0;
}