Czy ktoś może powiedzieć procedurę wewnętrzną kodu poniżej
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
Czy ktoś może powiedzieć procedurę wewnętrzną kodu poniżej
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
bitowym nie (~)
Wplynie każdy bit jego operandu. Jeśli operand jest wartością zmiennoprzecinkową, przed obliczeniem jest on obcinany do liczby całkowitej. Jeśli operand wynosi od 0 do 4294967295 (0xffffffff), będzie traktowany jako niepodpisana wartość 32-bitowa. W przeciwnym razie jest traktowany jako podpisana wartość 64-bitowa
Jest tak, ponieważ faktycznie masz do czynienia z pełną 32-bitową liczbą całkowitą bez znaku z NOT. Co to znaczy, nie jesteś po prostu odwracanie 0001 ale odwracanie 00000000000000000000000000000001
który staje 11111111111111111111111111111110
istocie jest to liczba + 1 i zanegowane. 1 staje się więc - (Lb + 1), który jest 1 lub binarnie (znaku)
na przykład: - $ temp = 1; echo ~ $ temp; print -2 // - (n ++)
echo ~$temp;
^bitwise not operator
Zakładając 32-bit, Bitwise odwrotność 0000
jest FFFF
(wszystkie „s 1
), który jest -1
, w przypadku podpisanych INT.
Innym sposobem na to patrzeć: Co ~
zrobił to, aby dać Ci (One's complement)
W celu uzyskania ujemnego numeru, można podjąć 2 dopełnienie, który jest po prostu 1's complement + 1
Więc
(1's complement of 0) + 1 = 0 //negative 0 is 0
hence, 1's complement of 0 = -1
Ponieważ ~0
to -1
.
~
Operator powraca do stanu.
Związek jest: -$temp === ~$temp + 1
Dobra odpowiedź od Cthulhu. –
znak jest dość ważny;) – Christoph