NOT(~) vs NEGATION(!)
bitwise-operators, c, c++, logical-operators
Solution
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)`.
Problem
``` #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?