| |
| ▲ | qsort 9 days ago | parent [-] | | In most C-like languages that would be a syntax error. E.g. in C and C++ as a rule you tokenize "greedily", "1--2" would be tokenized as "1", "unary decrement operator", "2", which is illegal because you're trying to decerment an rvalue. Python doesn't have "--", which allows the tokenizer to do something else. | | |
| ▲ | nyrikki 9 days ago | parent | next [-] | | 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_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 9 days ago | parent [-] | | Peter 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” |
| |
| ▲ | j2kun 9 days ago | parent | prev [-] | | Also worth noting that `1 - -2` works and produces 3 in C because the space breaks the operator. |
|
|