[how to use ~ operator ]
I have a structure say Alpha. I know the value of element inside Alpha (say a) which can be 0 or 1 - I want the other element of same structure to take inverse value of Alpha.a. For example:
if Alpha.a = 1
then Alpha.b = 0
and vice versa
I have tried:
Alpha.b = ~ (Alpha.a)
But unfortunately it doesnt work - when Alpha.a is 1, Alpha.b gets set to 254
Any ideas?
Thanks and regards,
SamPrat
In C, true is represented by 1, and false by 0. However, in a comparison, any non-false value is treated is true.
The ! operator does boolean inversion, so !0 is 1 and !1 is 0.
The ~ operator, however, does bitwise inversion, where every bit in the value is replaced with its inverse. So ~0 is 0xffffffff (-1). ~1 is 0xfffffffe (-2). (And both -1 and -2 are considered as true, which is probably what's confusing you.)
What you want is !, instead of ~.
Use XOR operator:
Alpha.b = Alpha.a ^ 1;
The ~ operator negates each individual bit. For example, assume that Alpha.a is an unsigned char. Then ~1 would read, in binary as, ~00000001, and the result would be 11111110 (again, in binary), which is the same as 254 in decimal and 0xFE in hex.
As others have suggested, use !Alpha.a or Alpha.a ^ 1.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With