Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> операция сдвига perl и js, операция сдвига perl и js 
:(
    Опции темы
Сisa
Дата 15.4.2013, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Помогите перевести строку из js в  perl:
Код

alert( -33538176>>15 );   //    -1024


Код

print -33538176>>15,"\n";   #  130048

По идее должен получиться одинаковый ответ, т.е. мне нужно получить и в perl тоже 
-1024 так же как и с js.
При положительных числах еще как то возможно понять как это работает, но при использовании отрицательного числа при сдвиге...

PM MAIL   Вверх
alezzz
Дата 15.4.2013, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



а при отрицательных мне кажется зависит от архитектуры
Код

print -33538176>>15,"\n";

Код

562949953420288

Код

This is perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x64-multi-thread

PM MAIL   Вверх
Сisa
Дата 15.4.2013, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



У меня:
This is perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x86-multi-thread

Архитектура может конечно, но ведь и js на этой же самой машине выполняется, что и перл.

Добавлено через 5 минут и 33 секунды
Наверно будет лишним изобретать какие то дополнительные преобразующие функции в текстовую строку, а там index, regexp, join и т.п.
Очевидно чего то я не знаю, и не понимаю, но должно быть элементарное подобное действие и в перл.
PM MAIL   Вверх
DurRandir
Дата 15.4.2013, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Цитата
Архитектура может конечно, но ведь и js на этой же самой машине выполняется, что и перл.

Это вообще ни о чём не говорит - к примеру, 32 битные бинарники на x64 машине.

Чтобы получить ответ "как в js" для данного примера, то 

Код
use integer; print -33538176>>15


Ну и Капитан Очевидность советует читать документацию.

Цитата
perldoc perlop:

Note that both "<<" and ">>" in Perl are implemented directly using
"<<" and ">>" in C.  If "use integer" (see "Integer Arithmetic") is in
force then signed C integers are used, else unsigned C integers are
used.

PM   Вверх
Pfailed
Дата 15.4.2013, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Как вариант
Код

use v5.10;
use JE;

$j = new JE;
say $j->eval('-33538176>>15');



--------------------
PM MAIL   Вверх
Сisa
Дата 15.4.2013, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Так :
Код

$t = -33538176;
if($t<0){
 $t*=-1;
 $t>>=15;
 $t++;
 $t*=-1;
}else{
 $t>>=15;
}
print $t; 

совсем неправильно? или можно так делать, ответы вроде бы для этих чисел сошлись...

Добавлено через 12 минут и 42 секунды
Если и perldoc (никак не научусь его читать) говорит что целые используются иначе без знака как в C
(С для меня только в перспективе), то получается что последний мой вариант с умножением на -1 должен быть нормальным smile

PM MAIL   Вверх
Сisa
Дата 15.4.2013, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



use integer; print -33538176>>15; решение очень подходит, 
но все же попробую без привлечения дополнительных модулей.
PM MAIL   Вверх
DurRandir
Дата 15.4.2013, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



use integer - не модуль, а прагма. perldoc perlop, perldoc integer.
PM   Вверх
Сisa
Дата 16.4.2013, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Прагма оказывается очень полезная штука! надо поизучать. Спасибо DurRandir!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.