помогите разобраться с sprintf

Автор kak2z, 01 сентября 2016, 18:04:05

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kak2z

есть такой пример
$n =  43951789;
$u = -43951789;
printf("%%u = '%u'\n", $n); // беззнаковое целое представление положительного числа
printf("%%u = '%u'\n", $u); // беззнаковое целое представление отрицательного числа

результат такой
Цитировать%u = '43951789'
%u = '4251015507'
раскажите по какому принципу отрицательно число преобразуется в целое?
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

GeorG

Так правильно:

$n =  43951789;
$u = -43951789;
printf("%%u = '%u'\n", $n); // беззнаковое целое представление положительного числа
printf("%%u = '%d'\n", $u); // беззнаковое целое представление отрицательного числа

%u - Десятичное целое число без знака.
%d - Десятичное целое число со знаком.
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

kak2z

#2
Цитата: GeorG от 01 сентября 2016, 18:32:30Так правильно:

$n =  43951789;
$u = -43951789;
printf("%%u = '%u'\n", $n); // беззнаковое целое представление положительного числа
printf("%%u = '%d'\n", $u); // беззнаковое целое представление отрицательного числа

%u - Десятичное целое число без знака.
%d - Десятичное целое число со знаком.
меня именно интересует %u при минусовом значении...
я сравниваю диапазоны АйПи адресов..
с помощью функции ip2long преобразовываю АйПи в целое число.. на самом деле в целом оно  не помещается, а получается тип float, но  без запятой и положительное...
так вот когда преобразовываешь айпишник с помощью ip2long то получаются отрицательные числа.. в интернетах рекомендуют приводить отрицательное число в целое с помощью как раз sprint с ключем %u
я привел)) сделал) все работает.. но хоть убей не могу понять по какому принципу он преобразовывает отрицательные числа в целые))


вот я про это
ЦитироватьЗамечание:
Ввиду того, что PHP тип integer является знаковым, и на 32-битных системах большое количество IP адресов будет представлено в виде отрицательных чисел, необходимо использовать "%u" в функции sprintf() или printf() для получения IP адреса в строковом беззнаковом виде.
Замечание:
Функция ip2long() возвратит FALSE для IP 255.255.255.255 в PHP 5 <= 5.0.2. Это было исправлено в PHP 5.0.3, теперь возвращается -1 (как и в PHP 4).
отсюда https://php.ru/manual/function.ip2long.html
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

GeorG

Цитироватьменя именно интересует %u при минусовом значении...
Потому что это представление отрицательного числа, что это такое, можно найти в Гугле.

Почему бы просто не использовать php функцию abs()?
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

kak2z

Цитата: GeorG от 01 сентября 2016, 21:36:04Потому что это представление отрицательного числа, что это такое, можно найти в Гугле.

Почему бы просто не использовать php функцию abs()?

не знаю) может потому что АйПи при использовании функци ip2long может принимать как положительное так и отрицательное значение... и если взять абсолютное значение от отрицательного числа то это уже будет другой АйПи.. а если взять его представление - то пределы остаются теже самые.. правда что такое представление отрицательного числа я так и не понял)) читаю..

все..  вроде понял что такое представление... это не просто десятичное число.. это по сути двоичное представление числа с дополнительным кодом просто преобразованное в десятичное.. благодаря этому диапазоны АйПи у нас остаются теже.. вроде так???
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)