For binary operators we have both bitwise and logical operators:
& bitwise AND
| bitwise OR
&& logical AND
|| logical OR
NOT (a unary operator) behaves differently though. There is just~ for bitwise and ! and it is always logical. ~ is used for binary NOTlogical.
I recognize NOT is a unary operation as opposed to AND and OR but I cannot think of a reason why the designers chose to deviate from the principle that single is bitwise and double is logical here, and went for a different character instead. I guess you could read it wrong, like a double bitwise operation that would always return the operand value. But that does not seem a real problem to me.
Is there a reason I am missing?