4 ms·
In C, that is really because Unary minus (negation) has precedence over binary operations. +a - b; // equivalent to (+a) - b, NOT +(a - b) -c + d; // e
by nyrikki 2y ago
In C, that is really because Unary minus (negation) has precedence over binary operations.
+a - b; // equivalent to (+a) - b, NOT +(a - b)
-c + d; // equivalent to (-c) + d, NOT -(c + d)
https://en.cppreference.com/w/cpp/language/operator_arithmetic https://en.cppreference.com/w/cpp/language/operator_arithmet...
+-e; // equivalent to +(-e), the unary + is a no-op if “e” is a built-in type
// because any possible promotion is performed during negation already
The same doesn't apply to, !! Which is applied as iterated binary operations (IIRC)
I am pretty sure the decriment operator came around well after that quirk was established.
- seanhunter 2y agoPeter van der Linden’s book “Expert C Programming” (which is awesome btw) says that one of them (Kernighan, Richie or maybe Ken Thompson I forget) realised early on that the c compiler had the wrong operator precedence for bit twiddling and unary and boolean operators but “at that stage we had a few thousand lines of C code and thought it would be too disruptive to change it”