Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

operatory

Ostatnio zmodyfikowano 2018-05-08 19:28
Autor Wiadomość
kuba556
Temat założony przez niniejszego użytkownika
operatory
» 2018-05-08 15:54:52
Witam! Mam takie pytanie:

Czym różnią się operatory ! I w języku C? Dlaczego !0 jest równe 1 , a  0 jest równe -1

Wiem, że operator ! jest operatorem negacji, a operator I operatorem bitowym or (chyba, że się mylę).

!0 - to wyrażenie jest prawdą czyli jest równe 1

Dlaczego 0 jest równe -1?
P-170957
jankowalski25
» 2018-05-08 16:57:27
Czym różnią się operatory ! I w języku C?
operator !
 jest jednoargumentowy,
operator I
 nie istnieje, a
operator |
 jest dwuargumentowy (oczywiście przeciążanie operatorów jest możliwe w C++, a nie w C).

Dlaczego 0 jest równe -1?
Nie jest, nie było i raczej nie będzie. To dwie zupełnie różne wartości. Podaj kod, w którym występuje taki problem. Co do potencjalnego rozwiązania, to spodziewam się, że próbujesz wywołać jednoargumentowo
| 0
, a na przykład lewa strona zawiera coś, co akurat daje -1.
P-170959
kuba556
Temat założony przez niniejszego użytkownika
» 2018-05-08 18:12:06
Być może o to chodziło |0
W tym zadaniu jest chyba błąd, ale nie ja go zrobiłem takie otrzymałem.
Dlaczego wyrażenie wywołane z jednym argumentem |0 równa się -1?
P-170962
md37
» 2018-05-08 18:19:38
A czy coś jest przed |0 ?
P-170963
Monika90
» 2018-05-08 19:11:05
~0 może być równe -1, ale nie musi, równie dobrze może być równe -0 albo -32767.
P-170964
kuba556
Temat założony przez niniejszego użytkownika
» 2018-05-08 19:14:23
Przed |0 nic nie ma.
P-170965
kuba556
Temat założony przez niniejszego użytkownika
» 2018-05-08 19:16:17
Monika czemu tak jest?
P-170966
jankowalski25
» 2018-05-08 19:28:20
Bo
~0
 oznacza zanegowanie wszystkich bitów. Czyli na przykład gdy
sizeof( int ) == 4
, to otrzymasz 4 bajty (32 bity) jedynek. Interpretacja takiej wartości zależy od używanego kodowania. W uzupełnieniu do dwóch (U2) będzie to -1, w kodowaniu znak-moduł (ZM) wyjdzie -INT_MAX (czyli -32767, gdy
sizeof( int ) == 2
), a w jeszcze innym kodowaniu (na przykład Binary Coded Decimal) to może nawet nie stanowić żadnej prawidłowej wartości.
P-170967
« 1 »
  Strona 1 z 1