Intrugująca rzecz w zadaniu domowym (poiom 1, lekcja operatory logiczne)
Ostatnio zmodyfikowano 2015-11-05 21:02
Uiskam Temat założony przez niniejszego użytkownika |
Intrugująca rzecz w zadaniu domowym (poiom 1, lekcja operatory logiczne) » 2015-11-01 21:33:42 Zadanie poeksperymentowaniu z wartościami logicznym podanego programu. Następująca linijkę: wynik = true && false || !true && false || !( !true && false ); zmieniłem tak: wynik = true & false | !true & false | !( !true & false ); . Program skompilował się i wszystko działało poprawnie. Zatem moje pytanie brzmi następująco: dlaczego na lekcji zostało podane, że i zapisujemy &&, a lub || skoro pojedynczy znak & czy | działa identycznie i wszystko jest dobrze? |
|
michal11 |
» 2015-11-01 21:49:24 Nie działa identycznie ( to, że akurat w twoim przypadku zadziałało to nie znaczy, że to jest reguła) operatory pojedyncze są binarnymi odpowiednikami operatorów podwójnych, czyli działają na bitach a nie na wartościach (u ciebie zadziałało, bo boole są traktowane jako bity) |
|
bombatom69 |
» 2015-11-05 17:45:56 To nie boole są traktowane jako bity tylko u niego reprezentacja całkowita wartości otrzymywanych w poszczególnych etapach nie wyjdzie poza najmłodszy bit, bo nie jest użyty żaden operator, który by mógł to zrobić.
Do pełni zrozumienia bezsensowności tego eksperymentu, trzeba zauważyć, że nie zamieniałeś operatorów wszystkich a wyłącznie operatory sumy i alternatywy. Zamień operator boolowski ! na binarny ~ i wówczas sobie poeksperymentuj. Dokonaj sobie rzutowania wyników na int, najlepiej po każdej operacji. Podam Ci przykład, krótki wynik operacji ~true nadal będzie odczytywany jako true. |
|
Rashmistrz |
» 2015-11-05 21:02:56 @Uiskam Powinieneś rozróżniać operatory logiczne od binarnych... Operatory logiczne traktują swoje operandy jako pojedyncze bity. tzn. interpretują je jako fałsz lub prawdę(wszystko inne od zera). Natomiast binarne wykonują równolegle operację logiczną na kolejnych bitach. Najłatwiej ukazać to pisemnie: 00110101 01110011 & ======== 00110001 Każdy operator logiczny ma swój odpowiednik binarny: |
|
« 1 » |