Re: if statements with integers
northsolomonsea@gmail.com wrote:
I apologize if this is trivial, been searching around but can't get
find a good explanation.
I often see statements like
if (val&SOME_ERROR_CODE) { ...
if (SOMECODE_SOMEOTHERCODE) {
etc.
where the macros are integer values, usually "bit" values 8, 16, 32
etc.
Can someone explain to me when they are true and when they are false?
what is the logic behind it? (a pointer to a webpage explaining would
also do fine as well).
It is trivial, but don't apologise.
The operator& clears all bits except the ones set in both operands. So,
if one of the operands is a single bit value, the operation results in 0
if the corresponding bit is not set in the other operands, or non-zero
if the corresponding bit *is* set. The conversion of an integral
expression to 'bool' yields 'false' if the integral expression is 0, and
'true' if the expression is not zero. Thus, the 'if (blah & some_bit)'
checks if the specific bit is set or cleared.
The second example you gave is a bit obscure. What is the meaning of
'SOMECODE_SOMEOTHERCODE'? Is that a single value? Then it's just the
expression that gets converted to 'bool' before being tested by the
'if', a non-zero value yields 'true', the zero yields 'false'.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask