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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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