Ben en soi, cela semble plutôt logique. C'est justement dans un langage de haut niveau que tu va définir des opérateurs compliqués, vu qu'en assembleur, tout va se résumer à des conditions sur des flags

Après, tous ces langages qui ont des opérateurs étranges nous ont servi à quelque chose: On sait de nos jours que lors de la création d'un langage, il faut que les opérateurs par défaut (non surchargés, etc.) se comportent de manière facilement prévisible.
(Genre même en JavaScript, si l'opérateur == est relativement prévisible, le fait qu'il effectue plein de conversions implicites le rend non transitif donc c'est le bordel)