int l=9;

```
int r=12;
int x=(l | (l+1)) & (~l | ~(l+1));
for(int i=(l+2);i<=r;i++)
{
x=(x | i) & (~x | ~i);
}
```

**the value x returns the xor of range(9,12) but i don’t understand this logic. please help.**

int l=9;

```
int r=12;
int x=(l | (l+1)) & (~l | ~(l+1));
for(int i=(l+2);i<=r;i++)
{
x=(x | i) & (~x | ~i);
}
```

**the value x returns the xor of range(9,12) but i don’t understand this logic. please help.**

It’s just simple XOR property. Take two numbers x and y. XOR$(x, y) = (x | y) & ($~x | ~y). In this case you are calculating XOR of 9, 10 first then whatever value comes, you take it’s xor with 11 and so on, upto you reach 12.

Here (9|10)&(~9|~10) = 3. Then (3|11)&(~3|~11) = 8. And finally (8|12)&(~8|~12) = 4. Also 9^10^11^12 = 4.