+ 1

# Explain please some C++ challenges.

1. Why the result is 3? int main() { int i = 0; cout << (i = 0 ? 1 : 2 ? 3 : 4); } 2. Why 2? int a; char c = 'a'; c += 3; c -= 'b'; a = c; cout << a;

4 Respuestas

+ 5

Let's break down those ternary operators in the first question!
i = 0 ? 1 : 2 ? 3 : 4
-> result is '3'
First, we do:
i = 0 ? 1 : 2
Maybe your confusion is that this means "does i equal 0? if so, i = 1; if not, i = 2".
But for that, we'd have to use double equals signs:
i == 0? 1 : 2
So what we have is actually this:
"Assign to i the result of the expression: 0 ? 1 : 2"
Since the conditional in this expression is simply "0", and 0 means FALSE, that translates to this:
i = (False? 1 : 2)
Therefore, i is now 2.
Then we do
2? 3 : 4
or, to be more exact,
i = 2 ? 3 : 4
And since in c++ any positive number other than zero gets interpreted as "true" if part of a conditional, this changes i = 2 to i = 3.
Just to recap,
"assign i to the value of this expression: (0 ? 1 : 2) (? 3 : 4)"
yields 3.
---
Second question!
int a; // declares an int, currently with no value
char c = 'a'; // declares a char with the value 'a'
c += 3; // c was 'a', then we added 3 to its ASCII value; now it's 'd'
c -= 'b'; // the difference between 'd' and 'b' is two, so now c == 2
a = c; // a is now 2
cout << a; // outputs 2
This code basically shows that you can operate on chars like you would with numbers. This is because all chars are basically arbitrary representations of a table of number, like ASCII or UNICODE.
http://www.asciitable.com/

+ 1

Thanks for answer, first one is correct, but how it works(

0

ye, i know maybe
so it asks:
if i = 0
true - 1
false - 2
and what next?)

0

great answer thanks)