Php Побитовое И возвращает ложный результат

У меня проблема с побитовой операцией AND над двумя переменными, когда я использую такие переменные, как показано ниже, возвращают правильные результаты для "lock" = 1, open = 0

$ACRel = "00000000000000000000010000000000";

// $STS = "11000000011100000000";  //788224 locked
$STS = "‭11000000001100000000‬";  //787200 open

echo (is_numeric($STS)&is_numeric($ACRel));  // return 1 or 0 

Я получил переменную $ STS в десятичном виде и использую функцию decbin () для преобразования:

$ACRel = "00000000000000000000010000000000";

//  $sts = decbin(788224);
$sts = decbin(787200); // return 11000000001100000000‬ 

echo (is_numeric($sts)&is_numeric($ACRel));

И теперь я всегда возвращаю 1, decbin в эхо возвращает то же значение, но когда я использую var_dump, у меня есть:

$sts = "‭11000000001100000000‬";
/home/vagrant/code/project/pro/calc.php:8:string '‭11000000001100000000‬' (length=26)

$sts = decbin(788224);
/home/vagrant/code/project/pro/calc.php:12:string '11000000001100000000' (length=20)

Почему длина разная, струны выглядят одинаково? может это ответ? но я не знаю почему.

decbin возвращает двоичную переменную, а $ sts = "" возвращает строковую переменную. Это два разных типа переменных, хотя var_dump возвращает строку

Oscargeek 09.09.2018 12:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В связи с проблемой, которую вы описываете, я вижу здесь две проблемы.

Применение побитового И

Первая проблема, которую я вижу, - это применить операцию побитового И к описанным переменным значения.

Но проблема здесь в том, что вы применение побитового И к логическому выводу метода is_number. Это означает, что вы всегда получите 1, если это правильные числа.

Решение здесь в том, что вы должны применить после преобразования строки как int: Intval.

Значение $ STS с нечисловыми значениями

Вторая проблема, которую я здесь вижу, связана с первым показанным примером, содержанием этой переменной содержит нечисловые значения:

$STS = "‭11000000001100000000‬";  //787200 open

Есть некоторые символы, которые не видны, но если вы проверите с помощью инспектора инструментов ASCII, вы можете увидеть это: посмотрите здесь и здесь и скопируйте значение этой переменной, вы увидите, что оно содержит нечисловые числа:

11000000001100000000U+202C

Итак, метод is_numeric возвращает false, потому что не распознает эту строку как числовую для этого нечислового (невидимого) значения. Вот почему в первом примере вы получаете 0.

Другие вопросы по теме