2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 ip2long
Сообщение29.06.2007, 13:24 
Аватара пользователя


02/06/07
38
Есть такая функция: http://php.net/ip2long

То есть, например, есть IP "127.0.0.1".
Функция делает делает следующее:
$ result = 127 ^ {256 ^ 3} + 0 ^ {256 ^ 2} + 0 ^ {256 ^ 1} + 1 ^ {256 ^ 0} $
$ result = 2130706433 $

Вопрос скорее чисто математический, поэтому задал сюда. Как сделать функцию, обратную этой? Случайно логарифмы не нужны? Если что мы их еще не проходили :oops:

 Профиль  
                  
 
 
Сообщение29.06.2007, 14:04 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
(В сторону) Хотел написать длииииинную скрипучую телегу о том, что сначала надо учить одно, а уж только потом другое, например - сначала 2+2, а потом теорию множеств, но задумался: да почему же? Потому что меня так учили - дык ну и что? И не стал писать.
По сути: будете смеяться, но http://php.net/long2ip

 Профиль  
                  
 
 
Сообщение29.06.2007, 15:21 
Аватара пользователя


02/06/07
38
Цитата:
По сути: будете смеяться, но http://php.net/long2ip

Не буду. Потому что эту функцию я знаю. А как её написали?

 Профиль  
                  
 
 Re: ip2long
Сообщение29.06.2007, 16:21 


29/09/06
4552
Kabal писал(а):
Функция делает делает следующее:
$ result = 127 ^ {256 ^ 3} + 0 ^ {256 ^ 2} + 0 ^ {256 ^ 1} + 1 ^ {256 ^ 0} $


Думаю, всех отпугивает первое слагаемое. С остальными ещё как-то можно справиться...
Но может, Вы исправите задачку на что-то попроще, вроде
$ result = 127 * {256 ^ 3} + 0 * {256 ^ 2} + 0 * {256 ^ 1} + 1 * {256 ^ 0} $,
и тогда и подсказчики набегут, а может и сами разобраться сможете...

Добавлено спустя 16 минут 41 секунду:

Тогда (если, конечно, Вы согласитесь с изменённым условием) задачка очень напоминает следующую: дано число
$$7*10^3+0*10^2+4*10^1+1*10^0=7041$$.
Как из него сделать последовательность 7.0.4.1 ???

 Профиль  
                  
 
 
Сообщение29.06.2007, 19:07 
Аватара пользователя


02/06/07
38
Да, конечно. Извиняюсь. Именно так:
$ result = 127 * {256 ^ 3} + 0 * {256 ^ 2} + 0 * {256 ^ 1} + 1 * {256 ^ 0} $,

Добавлено спустя 3 минуты 10 секунд:

Что-то меня переклинило и я ошибся в записи. Теперь увидев ее еще раз я понял, что это фактически перевод из 256'ричной системы счисления в десятичную.

 Профиль  
                  
 
 
Сообщение02.07.2007, 12:28 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Kabal писал(а):
А как её написали?

Ну, я бы писал по-простому, примерно так:
Код:
return sprintf("%d.%d.%d.%d",($n>>0x18)&0xFF,($n>>0x10)&0xFF,($n>>0x08)&0xFF,$n&0xFF);

(понятно, $n - это аргумент).

 Профиль  
                  
 
 
Сообщение04.07.2007, 03:50 
Аватара пользователя


02/06/07
38
Кстати, а Вы не знаете, как компьютер отличает unsigned integer от signed integer? :) Я так понимаю, что при signed int один бит нужен для указания знака - "+" или "-" (1 или 0). И именно поэтому max signed в два раз меньше max unsigined'а.

 Профиль  
                  
 
 
Сообщение04.07.2007, 08:56 


24/06/07
18
Он их вообще не отличает. А Ваше представление неправильное. Старший бит знакового числа действительно может быть ассоциирован со знаком, однако в компьютере используется т.н. дополнительное представление.

 Профиль  
                  
 
 
Сообщение04.07.2007, 13:09 
Аватара пользователя


02/06/07
38
Интересно, спасибо. :)

 Профиль  
                  
 
 
Сообщение05.07.2007, 02:13 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Nord писал(а):
Старший бит знакового числа действительно может быть ассоциирован со знаком, однако в компьютере используется т.н. дополнительное представление.

Вы не вполне точны. Во-первых, дополнительное представление используется только для целых чисел. Числа с плавающей точкой — отдельная песня, и там, как правило, есть знаковый бит. Во-вторых, существуют экзотические процессоры, например, i432. Они хранят в памяти (частичную) информацию о типе.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Mikhail_K


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group