Oggi ho appena fatto una scoperta interessante durante il test cosa succede calcolo bitwisely in php come INF^0
(^
=> bit per bit operatore per OR esclusivo (XOR)) quello che mi ha dato int(-9223372036854775808)
=> massimo possibile valore negativo in un sistema a 64 bit.di PHP in operazioni bit per bit restituisce valori strani
Ma poi mi chiedevo: "Perché il risultato andando negativo XOR quando il "Infinit positiva" significa 9223372036854775807
(63 bit su 1
con una primaria 0
) e 0 (64 Bits on 0
=>0 xor 0 = 0
) Cosa il valore infinito di PHP è comunque e qual è il calcolo dietro di esso? E perché ottengo un valore negativo (corretto?) quando uso "infinito negativo" (A 1
leader su uno 0
su 0 =>1 xor 0 = 1
? ".
Un altro punto interessante è che questo accade solo su PHP versione 5.5.9-1, e non ad esempio su 5.3.x. e 5.6.x (dove l'ho testato)! Forse qualcuno ha un'idea di cosa succede Là? Testato su tre versioni, ma solo mia (5.5.9-1) dà questi risultati:
Solo per farvi sapere, è solo un playaround abstract che ho fatto per divertimento, ma trovo che sia interessante. Forse qualcuno può aiutare qui o spiegarmi un pensiero sbagliato che ho? Dimmi solo se qualcuno ha bisogno di più informazioni su qualsiasi cosa!
EDIT: Di conseguenza per jbafford sarebbe bello ottenere un answere completa, quindi mi limiterò a lui cito: why does 5.5 and 5.6 result in PHP_INT_MIN, and everything else return 0?
'-9223372036854775808' è il massimo valore negativo possibile __per un intero (64 bit) __.... 'INF' non è un numero intero, ma un [IEE754 float] (https://en.wikipedia.org/ wiki/IEEE_754-1985) –
Pensi che il problema sia probabilmente nel confronto bit a bit da 'float (INF)' a 'int (0)'? Sai come funziona? –
Si stanno utilizzando operazioni bit a bit su un valore float a 64 bit, ma l'utilizzo di operazioni bit a bit considera il valore come se fosse un valore intero a 64 bit 'Gli operatori bitwise consentono la valutazione e la manipolazione di bit specifici all'interno di __integer __.' ... .. quindi è un confronto fallace. Gli op bit a bit non digitano correttamente se li stai eseguendo contro un float, perché sono interessati al livello di bit, ma imposteranno il tipo di dati risultante su un numero intero –