Priorytety operatorów i ich skutki

0

Cześć. Natknąłem się kiedyś na coś takiego

"Dennis Ritchie , twórca języka C , powiedział o pierwszeństwie w C (wspólnym dla języków programowania, które zapożyczają te reguły z C, na przykład C++ , Perl i PHP ), że lepiej byłoby przenieść operatory bitowe ponad operatory porównania . [28] Jednak wielu programistów przyzwyczaiło się do tej kolejności. Względne poziomy pierwszeństwa operatorów występujące w wielu językach w stylu C są następujące:"

Sam się spotkałem z językami z trochę inną kolejnością wykonywania działań. Trochę według tego co napisał twórca C.
Czy ktoś wie dlaczego tak chciał twórca języka C ?
Chyba powinni to wprowadzić. Aż się dziwie że do teraz tego nie rozwiązali.
Skutkiem tego jest to że (2&2>1) w dwóch językach programowania daje różne rezultaty(teraz sprawdzałem). To może prowadzić do poważnych błędów.

4

To może prowadzić do poważnych błędów.

IMO rzeczywistym problemem nie jest tu kolejność wykonywania działań, a języki zbyt chętne do auto-konwersji wartości; niezależnie od kolejności wykonywania działań, gdyby 2&2>1 było rozumiane jako 2 & (2 > 1), to powinno to się zakończyć error: unknown operation: int & bool i cyk po temacie 🙃

0
Patryk27 napisał(a):

To może prowadzić do poważnych błędów.

IMO rzeczywistym problemem nie jest tu kolejność wykonywania działań, a języki zbyt chętne do auto-konwersji wartości; niezależnie od kolejności wykonywania działań, gdyby 2&2>1 było rozumiane jako 2 & (2 > 1), to powinno to się zakończyć error: unknown operation: int & bool i cyk po temacie 🙃

Zdecydowanie bool tożsamy z integerem (ogólnie liczbami) to bardzo kosztowny błąd projektowy. "Miało być dobrze", jeden rozkaz maszynowy mniej przy if while, "wyszło jak zawsze"

0

W C++ wszytko mniej dokładne od signed int jest konwertowane do tego typu.

short a,b;
int c=a+b;
to tak naprawdę
short a,b;
int c=(int)a+(int)b;
i 
short a,b;
short c=(short)((int)a+(int)b);

1 użytkowników online, w tym zalogowanych: 0, gości: 1