$f='f';
for ($i=128; $i>0; $i=$i/2)
if ($f & $i) echo "1";
else echo "0";
Нужно проверить каждый бит символа для вывода его битового представления. Но появляется куча ошибок A non-numeric value encountered, хотя я проверяю всего 8 бит.
Как уже заметил Ипатьев, в вашем коде есть две ошибки. Строка 'f'
преобразуется к числу неправильным образом. По умолчанию используются стандартные правила PHP, вам же нужно получить числовое представление байта с помощью функции ord.
Вторая ошибка кроется в неверном условии цикла. Попытайтесь выполнить код вручную на бумажечке, и вы увидете, что когда $i доходит до 1, то 1 / 2 == 0.5
, а это больше нуля. С математической точки зрения цикл получился бы бесконечным. Но в реальности это не так, потому что точность чисел в машинном представлении ограничена, и в какой-то момент после деления получается ноль.
И да, если вы хотите научится и стать настоящим программистом, пожалуйста, форматируйте ваш код. Используйте отступы для тела цикла и условий, ставьте пробелы вокруг бинарных операторов (присваивание, деление, сравнение и т.п.) Чтобы узнать об этом подробнее, можете прочитать PEAR Coding Standards, где описывается рекомендуемый стиль кода.
$f = 'f';
for ($i = 128; $i >= 1; $i = $i / 2) {
if (ord($f) & $i) {
echo "1";
} else {
echo "0";
}
}
Внесённые изменения я выделил жирным.
Кстати говоря, алгоритм для перевода чисел в битовое представление уже реализован функцией decbin.
$f = 'f';
echo decbin(ord($f));
Ошибка совершенно очевидная. В математических операциях могут участвовать только числа. Поэтому символ "f" сначала преобразуется в число по правилам РНР (и становится равным нулю), но при этом РНР совершенно справедливо сообщает тебе, что ты пытаешься совершить математическую операцию с значением, которое не является числом.
На уроке надо было не рубиться в доту, а слушать преподавателя. Тогда бы ты не пропустил функцию ord().
А вот почему ты проверяешь не 8 бит, а чуть больше тысячи - это мы тебе оставим в качестве домашнего задания.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
У меня есть сейчас список <select>, который функционирует для вывода таблиц с информациейНужен ещё , который будет списком ников
Ситуация: Реализую программу для управления компьютерами локальной сети на С++Вопрос: Как отправить структуру данных от клиента и принять...