Свой клас типа RING (как выйти на отрицательные числа? (if(i&~07777)))

Модератор: Модераторы разделов

Аватара пользователя
kkkggg
Сообщения: 100

Свой клас типа RING

Сообщение kkkggg »

#include <iostream.h>
class RINT
{
private:
int v;
void assign(int i) {if(i&~07777) throw Bad_range(); v = i;} // <== if(i&~07777) !!!
int Bad_range() {cout << endl << "Error" << endl; return 1;}
public:
RINT(int i) {assign(i);}
RINT() {v = 0;}
RINT operator+(RINT);
RINT operator-(RINT);
void f() {cout << v << endl;}
};

RINT RINT::operator-(RINT arg)
{
return v - arg.v;
}
RINT RINT::operator+(RINT arg)
{
return v + arg.v;
}

int main ()
{
RINT a = RINT(10);
RINT b = RINT(100);
RINT z = a - b;
a.f();
b.f();
z.f();

return 0;
}

Данный класс, позволяет производить сложение. Вычетиние(из большего меньшее). Задача:

Диаппазон чисел с которыми работает данный клас 0-4095(строка помеченна в коде)
111111111111 => 07777 => 4095
bin oct dec

Как поправить данный клас, на работу с отрицательными числами. Допустим от 4094 до 4095?
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Свой клас типа RING

Сообщение elide »

сменить

Код: Выделить всё

if(i&~07777) throw Bad_range();
на

Код: Выделить всё

if(i<-4094 || i>4095) throw Bad_range();
???
слава роботам!
Спасибо сказали: