Ternary Operator
Hi guys!
I have this code, but I don't understand why it works...
1 2 3 4 5 6 7 8 9 10 11 12 13
|
#include <iostream>
using namespace std;
int main(){
int a = 1;
while (a <= 10){
cout << (a % 2 ? "****":"++++++++++")<< endl;
a++;
}
return 0;
}
|
The output is this...
****
++++++++++
****
++++++++++
****
++++++++++
****
++++++++++
****
++++++++++
|
Why this
cout << (a % 2 ? "****":"++++++++++")<< endl;
is true when a = 1, ?
thanks.
It's to do with the nature of modulo/remainder'ing and of integer division.
To quote wikipedia:
When dividing 3 by 10, 3 is the remainder as we always take the front number as the remainder when the second number is of higher value. |
So your program, seeing 2 as the larger number in 1 / 2 is deciding 1 is the remainder.
Try:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <iostream>
int main(){
int a = 1;
while (a <= 10) {
std::cout << "a = " << a << "\t"
<< a << " % 2 = " << a % 2
<< "\n"
<< ((a % 2) ? "****" : "++++")
<< "\n";
a++;
}
std::cout << std::flush;
return 0;
}
|
a = 1 1 % 2 = 1
++++
a = 2 2 % 2 = 0
****
a = 3 3 % 2 = 1
++++
a = 4 4 % 2 = 0
****
a = 5 5 % 2 = 1
++++
a = 6 6 % 2 = 0
****
a = 7 7 % 2 = 1
++++
a = 8 8 % 2 = 0
****
a = 9 9 % 2 = 1
++++
a = 10 10 % 2 = 0
**** |
As for the others... well 3 / 2 == 1.5 . Integer division is truncating so you get 3 / 2 == 1. That leaves a remainder of 1.
Last edited on
Thanks!
Topic archived. No new replies allowed.