if(i&~077) Что это значит? (Синтаксис языка)

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

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

if(i&~077) Что это значит?

Сообщение kkkggg »

if(i&~077)
Что это значит?
i это int.

Речь идёт, о 6-битовых неотрицательных целых.

Вот полный пример класса.

class Tiny {
char v;
void assign(int i) {if(i&~077)throw Bad_range(); v=i} //!!!
public:
class Dad_range{};

Tiny(int i) {assing(i); return *this;}

operator int() const {return v;}
};

Пример из книги Бьерн Страуструпа "Язык программирования С++ спец издание" стр. 323 Операторы преобразования.
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: if(i&~077) Что это значит?

Сообщение v04bvs »

~077 это побитовая инверсия. 077 в двоичном виде 00...000111111, ~077 это 11...111000000, соответственно i & ~077 обнуляет нижние 6 битов у i. Поэтому условие (i & ~077) справедливо тогда, когда у i имеюся ненулевые биты выше 6-го. В данном случае это эквивалентно условию (i < 0 || i > 128)
Спасибо сказали: