Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #85969
| From | Ike Naar <ike@sdf.org> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? |
| Date | 2022-08-18 06:52 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <slrntfrodf.cin.ike@sdf.org> (permalink) |
| References | <tdkk90$1bt7$1@gioia.aioe.org> |
On 2022-08-18, R.Wieser <address@not.available> wrote:
> Hello all,
>
> I just read a post on the "thedailywtf" website where someone said (and
> someone else confirmed) :
>
> "flags & flagMask == flagMask can be true for flags != flagMask if flags is
> a superset of flagMask"
>
> If I translate that to assembly language (what I normally work with) it
> doesn't seem to be true :
>
> mov eax,flags
> and eax,flagmask
> cmp eax,flagmask
>
> AFAIK the last eax *cannot* have any bits set which are not present in
> flagmask. Therefore, can somebody explain that piece of (I take it) C+ for
> me (Whats the problem with it) ?
First, == binds stronger than & in C and C++, so
flags & flagMask == flagMask
is interpreted as
flags & (flagMask == flagMask)
which can be simplified to
flags & 1
which is true if the least significant bit of flags is set.
So, for example, if flags = 1 and flagMask = 0 then
flags & (flagMask == flagMask) is true for flags != flagMask.
Your assembly code suggests that you have the priorities of & and ==
reversed, but even in that case, for flags = 1 and flagMask = 0,
--> flags is a superset of flagMask
--> flags != flagMask
--> ((flags & flagMask) == flagMask) equals ((1 & 0) == 0)
equals (0 == 0)
equals true
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? "R.Wieser" <address@not.available> - 2022-08-18 07:55 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Ike Naar <ike@sdf.org> - 2022-08-18 06:52 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? "R.Wieser" <address@not.available> - 2022-08-18 09:58 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Muttley@dastardlyhq.com - 2022-08-18 14:50 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? "R.Wieser" <address@not.available> - 2022-08-18 17:12 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? scott@slp53.sl.home (Scott Lurndal) - 2022-08-18 15:29 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-08-18 16:43 +0100
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? scott@slp53.sl.home (Scott Lurndal) - 2022-08-18 16:10 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? David Brown <david.brown@hesbynett.no> - 2022-08-18 21:19 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Manfred <noname@add.invalid> - 2022-08-19 02:57 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? David Brown <david.brown@hesbynett.no> - 2022-08-19 08:29 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-08-19 08:12 -0700
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Mike Terry <news.dead.person.stones@darjeeling.plus.com> - 2022-08-18 16:47 +0100
Re: flags & flagMask == flagMask can be true for flags != flagMask if Muttley@dastardlyhq.com - 2022-08-18 15:50 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-08-18 10:46 -0700
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-08-18 11:30 -0700
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Muttley@dastardlyhq.com - 2022-08-18 15:47 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-08-19 08:53 -0700
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? David Brown <david.brown@hesbynett.no> - 2022-08-19 18:00 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Muttley@dastardlyhq.com - 2022-08-19 16:10 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-08-19 16:45 -0700
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Juha Nieminen <nospam@thanks.invalid> - 2022-08-19 06:01 +0000
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-08-19 16:07 +0100
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-08-19 16:08 +0100
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Mike Terry <news.dead.person.stones@darjeeling.plus.com> - 2022-08-18 16:14 +0100
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? "R.Wieser" <address@not.available> - 2022-08-18 18:10 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-08-18 11:56 -0700
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? "R.Wieser" <address@not.available> - 2022-08-18 21:31 +0200
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-08-18 21:24 -0700
Re: flags & flagMask == flagMask can be true for flags != flagMask if flags is a superset of flagMask ? "R.Wieser" <address@not.available> - 2022-08-19 09:36 +0200
csiph-web