Discussion in 'C Programming' started by lezard, Jun 1, 2005.

1. ### lezardGuest

Hello

i_before = 1;
i_after = i_before and a mask;
i_before = (i_after & 0x7) | 0x40; // then i_before == 1

I don't find what mask is applied to i_before at the second line. :-(
Can someone help me?

--
Lezard

lezard, Jun 1, 2005

2. ### Richard BosGuest

lezard <> wrote:

> i_before = (i_after & 0x7) | 0x40; // then i_before == 1

Regardless of anything else, this is impossible. Think about it. How
could _anything_ | 0x40 ever be 1?

Richard

Richard Bos, Jun 1, 2005

3. ### peteGuest

lezard wrote:
>
> Hello
>
> i_before = 1;
> i_after = i_before and a mask;
> i_before = (i_after & 0x7) | 0x40; // then i_before == 1
>
> I don't find what mask is applied to i_before at the second line. :-(
> Can someone help me?

Any odd number value for mask, will make the comment true.

pete, Jun 1, 2005
4. ### peteGuest

pete wrote:
>
> lezard wrote:
> >
> > Hello
> >
> > i_before = 1;
> > i_after = i_before and a mask;
> > i_before = (i_after & 0x7) | 0x40; // then i_before == 1
> >
> > I don't find what mask is applied to i_before at the second line. :-(
> > Can someone help me?

>
> Any odd number value for mask, will make the comment true.

Actually, as Richard Bos stated, there is no value
which when bitwise ORed with 0x40, yields 1.

pete, Jun 1, 2005
5. ### Michael WojcikGuest

In article <>, pete <> writes:
> pete wrote:
> >
> > lezard wrote:
> > >
> > > i_before = 1;
> > > i_after = i_before and a mask;
> > > i_before = (i_after & 0x7) | 0x40; // then i_before == 1
> > >
> > > I don't find what mask is applied to i_before at the second line. :-(
> > > Can someone help me?

> >
> > Any odd number value for mask, will make the comment true.

>
> Actually, as Richard Bos stated, there is no value
> which when bitwise ORed with 0x40, yields 1.

True, though there could be a *variable* which, after being bitwise-
ORed with 0x40, evaluates to 1. It would have to have fewer than
seven value bits, so it would have to be a bitfield; and since in the
OP's posted code i_before cannot be the identifier for a bit- field
(which must be part of a struct or union, and so must be the operand
of the "." or "->" operator), it would have to be a macro for one.

(At least I think that's right; corrections cheerfully accepted.)

--
Michael Wojcik

Art is our chief means of breaking bread with the dead ... but the social
and political history of Europe would be exactly the same if Dante and
Shakespeare and Mozart had never lived. -- W. H. Auden

Michael Wojcik, Jun 2, 2005