Post

Visualizzazione dei post da 2017

Translate

Valore minimo di una costante intera in PHP

In PHP il minimo intero a 64 bit vale esattamente -9223372036854775808 (costante PHP_INT_MIN), che equivale a -2^63 o anche 1 << 63. La sua rappresentazione binaria è la seguente:
1000000000000000000000000000000000000000000000000000000000000000
L'intero più grande è 9223372036854775807 (costante PHP_INT_MAX) equivalente a 2^63-1 o anche 1 << 63 - 1. Questa è la sua rappresentazione binaria:
0111111111111111111111111111111111111111111111111111111111111111

Detto questo, la seguente assegnazione dovrebbe create una variable di tipo int, pari al valore specificato:
$x = -9223372036854775808;
Invece $x sarà un double, anziché un int. Infatti il risultato di:
var_dump($x);
Sarà:
double(-9.2233720368548E+18)
La costante intera assegnata a $x è stata convertita in double, perché?
La motivazione sta nel fatto che l'operatore unario "-" è applicato subito dopo che la costante intera è stata letta. Dato che la costante specificata è superiore al massimo intero (92233720…