В связи с проблемой, которую вы описываете, я вижу здесь две проблемы.
Применение И поразрядно
Первая проблема, которую я вижу, состоит в том, чтобы применить операцию AND в битовом режиме к описанным переменным значениям.
Но проблема в том, что вы применяете побитовое AND к логическому выводу метода is_number . Это означает, что вы всегда получите 1, если они правильные числа.
Решение здесь заключается в том, что вы должны применять после приведения строки как int: intval .
$ STS значение с не числовыми значениями
Вторая проблема, которую я вижу здесь, показана в первом примере, содержимое этой переменной содержит не числовые значения :
$STS = "11000000001100000000"; //787200 open
Есть некоторые символы, которые не видны, но если вы проверите с помощью инспектора инструментов ASCII, вы можете увидеть его: посмотрите здесь и здесь и скопируйте значение этого переменная, вы увидите, что содержит не числовые числа:
11000000001100000000U+202C
Итак, метод is_numeric возвращает false, поскольку не распознает эту строку как числовую для этого нечислового (невидимого) значения. И именно поэтому в первом примере вы получаете 0.