Сегодня я только что сделал интересное открытие во время тестирования, что происходит вычисление bitwisely в PHP, как INF^0
(^
=> Поразрядного Оператор для исключающих ИЛИ (XOR)), что дало мне int(-9223372036854775808)
=> максимально возможной отрицательное значение в 64-битной системе.PHP в битовых операциях возвращает странные значения
Но тогда я спрашиваю себя: «Почему результат происходит отрицательным XOR, когда„положительная Бесконечные“означает 9223372036854775807
(63 бит на 1
с ведущим 0
) и 0 (64 бит на 0
=>0 xor 0 = 0
) Что это бесконечное значение PHP, хотя и какой расчет за ним? И почему я получаю (правильное?) отрицательное значение, когда использую «отрицательный бесконечный» (A ведущий 1
против ведущего 0
по 0 =>1 xor 0 = 1
? ».
Еще один интересный момент в том, что это происходит только на PHP версии 5.5.9-1, а не на примере 5.3.x. и 5.6.x (где я его протестировал)! Возможно, у кого-то есть идея, что происходит там? Испытано его на трех версиях, но только моя (5.5.9-1) дает такие результаты:
Просто, чтобы вы, ребята, знаете, это просто абстрактный playaround я сделал для удовольствия, но я считаю, что это интересно. Может быть, кто-то может помочь здесь или объяснить мне неправильную мысль? Просто скажите, нужно ли кому-то больше информации о чем угодно!
EDIT: В соответствии с jbafford было бы здорово, чтобы получить полный answere, так что я просто процитирую его: why does 5.5 and 5.6 result in PHP_INT_MIN, and everything else return 0?
'-9223372036854775808' наибольшее возможное отрицательное значение __for (64-разрядное) целое число __....' INF' не является целым числом, но [плавающий IEE754] (https://en.wikipedia.org/ wiki/IEEE_754-1985) –
Считаете ли вы, что проблема, вероятно, в побитом сравнении из 'float (INF)' to 'int (0)'? Вы знаете, как это работает? –
Вы используете побитовые операции в 64-битном значении с плавающей запятой, но с помощью побитовых операций обрабатывает значение, как если бы это было 64-битное целочисленное значение. Побитовые операторы допускают оценку и обработку определенных битов в __integer __. ... .. поэтому это ошибочное сравнение. Побитовые операторы не проверяют, выполняются ли они против float, потому что они заинтересованы в уровне бит, но они будут устанавливать результирующий тип данных в целое число. –