+ 5
Cout with &
Refer below code: #include <iostream> using namespace std; int main() { for(int i=0;i<10;++i) { if(i&1) { cout << i << endl; } } return 0; } Why output of same is 1 3 5 7 9 ? could not get statement of if....
8 Answers
+ 6
As Ipang stated, the if statement condition is a simple form of bit hacking to extract odd numbers and it's equivalent to if (i % 2 != 0).
The for loop cycles 10 times (0-9). Let's convert each number to its binary form, since I wanna explain it in more detail of course and more than that it's a BITwise operation!
4 bits is enough for representing the whole range.
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
Now let's say, we wanna evaluate number 7. What we are gonna do is, nothing but ANDing binary form of number 7 with 1 (I suppose you know how to do that).
0111
0001 &
________
0001
Yay! you got 1 which means true which means it's an odd number. what if it is an even one? Let's say 4.
0100
0001 &
________
0000
Whoops! you got 0 which means it's an even number.
+ 14
It filters out the even numbers so you get the odd ones only.
+ 7
C++ Soldier (Babak) just gave an excellent explanation in detail, I was only giving a short footage of what it does.
Big Thanks : )
+ 7
C++ Soldier (Babak) No mate! not at all, I never thought that way, as a matter of fact, was actually grateful you came up with that, to explain how it works under the hood, how and why it worked out the way it did, I value people giving explanatory answers, no issues whatsoever mate : )
Cheers Babak ; )
+ 5
Ketan Lalcheta
Compilers use complex grammars to identify what the heck is going on in a program in different contexts. For example, & operator in [ int *y = &x; ] is considered the address (reference) operator but in [ bool b = x & y; ], bitwise AND. You see, it has some sort of analyzer and predefined patterns by which it can confidently recognizes that the operator & has 2 operand or one (Of course, our case here is easy to recognize).
+ 4
Oh come on Ipang !
I didn't do that to render your answer less worthy. You just gave me the motivation to make it a bit lengthy! ; - ]
+ 4
Ipang
Kind and reasonable as always. SL would've been get dull without people like you, dear. Now let me mess with this post a bit! I guess OP don't mind after all!
๐ช๐น๐น๐น๐ช
๐ช๐ช๐น๐ช๐ช
๐ช๐ช๐น๐ช๐ช
๐ช๐ช๐น๐ช๐ช
๐ช๐น๐น๐น๐ช
๐ช๐ช๐ช๐ช๐ช
๐น๐น๐น๐น๐ช
๐น๐ช๐ช๐ช๐น
๐น๐น๐น๐น๐ช
๐น๐ช๐ช๐ช๐ช
๐น๐ช๐ช๐ช๐ช
๐ช๐ช๐ช๐ช๐ช
๐ช๐น๐น๐น๐ช
๐น๐ช๐ช๐ช๐น
๐น๐น๐น๐น๐น
๐น๐ช๐ช๐ช๐น
๐น๐ช๐ช๐ช๐น
๐ช๐ช๐ช๐ช๐ช
๐น๐ช๐ช๐ช๐น
๐น๐น๐ช๐ช๐น
๐น๐ช๐น๐ช๐น
๐น๐ช๐ช๐น๐น
๐น๐ช๐ช๐ช๐น
๐ช๐ช๐ช๐ช๐ช
๐ช๐น๐น๐น๐ช
๐น๐ช๐ช๐ช๐ช
๐น๐ช๐ช๐น๐น
๐น๐ช๐ช๐ช๐น
๐ช๐น๐น๐น๐ช
+ 2
thanks a lot for detailed explanation Ipang....any idea why compiler considered it as bitwise operation? does it due to the & operator added into if condition??