Всем привет. Изучая книгу Бьярне Страуструпа, я наткнулся на интересный, по моему мнению, пример:
class Tiny {
char v;
void assign(int i) {
if(i&~077) // #1
throw Bad_range();
v = i;
}
public:
class Bad_range{};
Tiny(int i) { assign(i); }
Tiny& operator = (int i) { assign(i); return *this; }
operator int() const { return v; }
};
int main () {
Tiny c1 = 2;
Tiny c2 = 1;
Tiny c3 = c1 - c2; // #2
}
Так вот, первый вопрос(# 1), что это за условие, так как я вижу его впервые.
И (# 2), выражение (c1 - c2
) превратится в тип int
или Tiny
? И будет ли разница в производительности, если не учитывать второй вопрос?
077 - число в восьмеричной системе счисления, которое бинарно записывается как 00..00111111 - нули до размера int
. Операция ~
обращает все биты, т.е. получается 11..11000000. Операция побитового И с таким числом даст true
(ненулевое значение) при наличии в числе хотя бы одного единичного бита начиная с 6 (считая от нуля). Так что это проверка, что число от 0 до 63 включительно (как для беззнаковых, так и для знаковых чисел), вернее, что число вне этого диапазона - тогда генерируется исключение.
Во второй части c1
и c2
для разности будут приведены к типу int
(оператор int()
), и результат вычитания типа int
будет использован для создания объекта c3
типа Tiny
(конструктор Tiny(int)
).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не понимаю, что не так с моим алгоритмом, но на сайте выдает что ошибка на одном из тестов проверкиОшибка в реализации алгоритма или в самом...
Всем приветЕсть задача , если запустить через консоль , то всё выдает как нужно