#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i=-5;
while(~(i))
{
cout<<i;
++i;
}
}
The output is -5,-4,-3,-2. Shouldn't it print values till -1?Why is it only till -2. And please explain me the difference between 'not' and 'negation' operators.When ever I write a program they were the source for bugs.
while(i)
I know that the loop condition will be true for positive and negative i's except 0.
while(!i) vs while(~i)
For what values of 'i' the above two loops get executed?
When i
gets to -1
, the value of ~i
is ~-1
, or 0
, so the while
loop stops executing. The !
operator works because it does something completely different; it results in 1
for 0
values and 0
for all other values. ~
is a bitwise negation.
A little more in detail:
~
takes each bit in a number and toggles it. So, for example, 100102 would become 011012-1
is all ones in binary when a two's complement signed integer.~0b…11111111
is 0
.However:
!0
is 1
, !anythingElse
is 0
-1
is not 0
!-1
is still 0
And if you actually want to loop including i == -1
, just use while (i)
instead of while (~i)
.