Re: if ( i&&0x1)
От: Аноним  
Дата: 09.06.04 20:32
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Подскажите пожалуйста что обозначает данная запись (какое тут условие)??

E>unsigned int i;
E>if(i&&0x1)
E>{

E>}


Что-то пролистал тему, столько ответов и предложений. Что захотель тоже посильную лепту внести
Мне кажется так более понятнее:

if( х&&0x1 ) == if ( х | 1 )
if( х||0x1 ) == if ( х & 1 )

Я знаю что сейчас сорву гром "аплодисментов" Не судите строго
Но в данном случае х — это абстракция, то бишь состояние, либо нуль, либо единица.
Повторяю — это не бинарная операцЫя, а логическая
Re[2]: if ( i&&0x1)
От: Кодт Россия  
Дата: 09.06.04 22:10
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Что-то пролистал тему, столько ответов и предложений. Что захотель тоже посильную лепту внести

А>Мне кажется так более понятнее:

А>if( х&&0x1 ) == if ( х | 1 )

А>if( х||0x1 ) == if ( х & 1 )

Что-то ты не то написал.

(x|1) — вычисление x и установка младшего бита, поэтому выражение всегда истинно.
(x&1) — вычисление x и проверка младшего бита.
(x||1) — вычисление x, затем истина. Мало чем отличается от выражения ((bool)x , true).
(x&&1) — вычисление x. Не отличается от выражения (bool)x.

x|1 эквивалентно x||1.
x&1 не эквивалентно x&&1.

А>Я знаю что сейчас сорву гром "аплодисментов" Не судите строго


...Но справедливо.

А>Но в данном случае х — это абстракция, то бишь состояние, либо нуль, либо единица.


Эта абстракция зовётся булевым выражением. У него есть совершенно определённый тип — bool.
Если ты имеешь в виду преобразование интегральных выражений к bool, то так и скажи.

А>Повторяю — это не бинарная операцЫя, а логическая


Вот специально за этим в С/С++ разнесли булевые и битовые операции.
... << RSDN@Home 1.1.2 stable >>
Перекуём баги на фичи!
Re[4]: if ( i&&0x1)
От: Аноним  
Дата: 10.06.04 05:35
Оценка:
удивительно как на такие простые вопросы находится столько вариантов ответа..) странно что среди них есть правильные.)
предлагаю еще одну тему посложнее.)
что будет после
int i=0;
++i++;
cout<<" i = "<<i;

а если не будет то в чем проблема.)))
Re[5]: if ( i&&0x1)
От: ak13_boda  
Дата: 10.06.04 07:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>удивительно как на такие простые вопросы находится столько вариантов ответа..) странно что среди них есть правильные.)

А>предлагаю еще одну тему посложнее.)
А>что будет после
А> int i=0;
А> ++i++;
А> cout<<" i = "<<i;

А>а если не будет то в чем проблема.)))



The result of the postfix increment or decrement operation is the value of the postfix-expression before the increment or decrement operator is applied. The type of the result is the same as that of the postfix-expression but is no longer an l-value. After the result is obtained, the value of the operand is incremented (or decremented).

Postfix increment and decrement has higher precedence than prefix increment and decrement operators.

Из всего вышенаписанного следует, что префиксная операция инкремента получает не l-value.
Re[5]: if ( i&&0x1)
От: Кодт Россия  
Дата: 10.06.04 10:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>что будет после

А> int i=0;
А> ++i++;
А> cout<<" i = "<<i;

А>а если не будет то в чем проблема.)))


Будет ошибка компиляции
в выражении ++i++ скобки расставляются так: ++(i++), а поскольку i++ это rvalue, то упс.

А если написать (++i)++, то это UB, хотя и с достаточно ожидаемым результатом: i+=2.
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.