The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите данный JavaScript перевести на perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите данный JavaScript перевести на perl"  
Сообщение от filin email(??) on 24-Май-07, 15:25 
Помогите данный JavaScript перевести на perl

function foo(word1,word2) {
    var rez=word1^word2;
    var max32=0xffffffff;
    if ( rez < 0 ) rez = max32 + 1 + rez;
    return rez;
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Помогите данный JavaScript перевести на perl"  
Сообщение от A on 24-Май-07, 16:27 
>Помогите данный JavaScript перевести на perl
>
>function foo(word1,word2) {
>    var rez=word1^word2;
>    var max32=0xffffffff;
>    if ( rez < 0 ) rez =
>max32 + 1 + rez;
>    return rez;
>}

sub foo {
  my ($word1, $word2)=@_;
  my $res=$word1^$word2;
  my $max32=0xffffffff;
  $res += $max32 + 1 if ($res < 0);
  return $res;
}

(запускать не пробовал, но вроде так)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Помогите данный JavaScript перевести на perl"  
Сообщение от filin email(??) on 24-Май-07, 16:33 
>>Помогите данный JavaScript перевести на perl
>>
>>function foo(word1,word2) {
>>    var rez=word1^word2;
>>    var max32=0xffffffff;
>>    if ( rez < 0 ) rez =
>>max32 + 1 + rez;
>>    return rez;
>>}
>
>sub foo {
>  my ($word1, $word2)=@_;
>  my $res=$word1^$word2;
>  my $max32=0xffffffff;
>  $res += $max32 + 1 if ($res < 0);
>  return $res;
>}
>
>(запускать не пробовал, но вроде так)

В этом то вся и есть проблема, что в лоб нечего не получится

javascript и perl код дадут разные результаты...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Помогите данный JavaScript перевести на perl"  
Сообщение от NuINu (??) on 24-Май-07, 17:01 
>>>Помогите данный JavaScript перевести на perl
>
>В этом то вся и есть проблема, что в лоб нечего не
>получится
>
>javascript и perl код дадут разные результаты...
наверное разные подходы к вычислению, скажи а нафига такая мудреная функция? Из глубин памяти всплывают какие то древние ассоциации про дополнительный код.
ну ладно вот я провел эксперимент, может быть он натолкнет тебя на умные мысли?
----------------------
#!/usr/bin/perl -w


use strict;

my $word1 = shift or die("not defined first argument");
my $word2 = shift or die("not defined second argument");

my $w1 = hex $word1;
print "first: $word1 =\t $w1\n";
my $w2 = hex $word2;
print "second: $word2=\t $w2\n";

my $rez= $w1 ^ $w2;
my $maxnum = 255;
my $maxhalf = $maxnum>>1;
print "maxnum = $maxnum, halfmax = $maxhalf\n";
print "first rez = $rez\n";
  if($rez >= $maxhalf)
  {
      $rez = -($maxnum-$rez+1);
      print "negative rez = $rez\n";
      $rez = $maxnum+$rez+1;
  }
  my $si = sprintf "%02X", $rez;
  print  "$rez =\t '$si'\n";
exit(0);
---------------------------------
запускаем так:
./hex_xor.pl  0xFE 0x00
./hex_xor.pl  0xFF 0x00
./hex_xor.pl  0xFE 0x7E


В итоге для байта видим, что перл нифига отритцательные числа не получает поэтому код функции будет:
sub foo {
  my ($word1, $word2)=@_;
  my $res=$word1^$word2;
  return $res;
}

Да кстати этот эксперимент, можно легко расширить до 32 разрядных чисел.
:-)))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Помогите данный JavaScript перевести на perl"  
Сообщение от A on 24-Май-07, 17:52 
>>>Помогите данный JavaScript перевести на perl
>>>
>>>function foo(word1,word2) {
>>>    var rez=word1^word2;
>>>    var max32=0xffffffff;
>>>    if ( rez < 0 ) rez =
>>>max32 + 1 + rez;
>>>    return rez;
>>>}
>>
>>sub foo {
>>  my ($word1, $word2)=@_;
>>  my $res=$word1^$word2;
>>  my $max32=0xffffffff;
>>  $res += $max32 + 1 if ($res < 0);
>>  return $res;
>>}
>>
>>(запускать не пробовал, но вроде так)
>
>В этом то вся и есть проблема, что в лоб нечего не
>получится
>
>javascript и perl код дадут разные результаты...

а чем отличаются?
(подозреваю, что javascript тоже может дать разные результаты на разных браузерах ,-)))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Помогите данный JavaScript перевести на perl"  
Сообщение от filin email(??) on 24-Май-07, 18:06 
>>>>Помогите данный JavaScript перевести на perl
>>>>
>>>>function foo(word1,word2) {
>>>>    var rez=word1^word2;
>>>>    var max32=0xffffffff;
>>>>    if ( rez < 0 ) rez =
>>>>max32 + 1 + rez;
>>>>    return rez;
>>>>}
>>>
>>>sub foo {
>>>  my ($word1, $word2)=@_;
>>>  my $res=$word1^$word2;
>>>  my $max32=0xffffffff;
>>>  $res += $max32 + 1 if ($res < 0);
>>>  return $res;
>>>}
>>>
>>>(запускать не пробовал, но вроде так)
>>
>>В этом то вся и есть проблема, что в лоб нечего не
>>получится
>>
>>javascript и perl код дадут разные результаты...
>
>а чем отличаются?
>(подозреваю, что javascript тоже может дать разные результаты на разных браузерах ,-)))
>

на JS 6537379050^1797494240, результат -292820726

если пишу тоже самое на perl, то результат 2497473055

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Помогите данный JavaScript перевести на perl"  
Сообщение от jd (??) on 25-Май-07, 02:26 
>на JS 6537379050^1797494240, результат -292820726
>
>если пишу тоже самое на perl, то результат 2497473055

А что, собственно, вы хотите получить: функцию, дающую такой же результат, как ваша функция на JS или функцию, дающую определённый результат (не важно, на каком языке она реализована)? Если второе, то какой результат вы хотите получить? В частности, знаковые или беззнаковые у вас предполагаются аргументы и возвращаемое значение и какого они размера? Типы данных, используемые в различных языках хорошо описаны, так что результат предсказуем - иначе их нельзя было бы использовать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Помогите данный JavaScript перевести на perl"  
Сообщение от filin email(??) on 25-Май-07, 03:22 
>>на JS 6537379050^1797494240, результат -292820726
>>
>>если пишу тоже самое на perl, то результат 2497473055
>
>А что, собственно, вы хотите получить: функцию, дающую такой же результат, как
>ваша функция на JS или функцию, дающую определённый результат (не важно,
>на каком языке она реализована)? Если второе, то какой результат вы
>хотите получить? В частности, знаковые или беззнаковые у вас предполагаются аргументы
>и возвращаемое значение и какого они размера? Типы данных, используемые в
>различных языках хорошо описаны, так что результат предсказуем - иначе их
>нельзя было бы использовать.


Я хочу получить на perl результат точно такой же как и на JavaScript.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Помогите данный JavaScript перевести на perl"  
Сообщение от NuINu (??) on 25-Май-07, 10:16 
>>>>>Помогите данный JavaScript перевести на perl
>
>на JS 6537379050^1797494240, результат -292820726
>
>если пишу тоже самое на perl, то результат 2497473055

Скажу так, оба языка дают неверный результат!!!!
0x185A87CEA  110000101101010000111110011101010
0x6B2395E0    1101011001000111001010111100000
------------------------------------------------xor
0x1EE8BE90A  111101110100010111110100100001010

dec:  8297113866

догадаешься почему? у тебя первое число выходит за границы 32 бит,
в резульате и функция твоя будет работать не правильно, в любом языке
если ты ей будешь подавать на вход числа больше 32 бит.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Помогите данный JavaScript перевести на perl"  
Сообщение от filin email(??) on 25-Май-07, 10:22 
>>>>>>Помогите данный JavaScript перевести на perl
>>
>>на JS 6537379050^1797494240, результат -292820726
>>
>>если пишу тоже самое на perl, то результат 2497473055
>
>Скажу так, оба языка дают неверный результат!!!!
>0x185A87CEA  110000101101010000111110011101010
> 0x6B2395E0    1101011001000111001010111100000
>------------------------------------------------xor
>0x1EE8BE90A  111101110100010111110100100001010
>
>dec:  8297113866
>
>догадаешься почему? у тебя первое число выходит за границы 32 бит,
>в резульате и функция твоя будет работать не правильно, в любом языке
>
>если ты ей будешь подавать на вход числа больше 32 бит.

Это я знаю. Но как совместить функции :-(

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Помогите данный JavaScript перевести на perl"  
Сообщение от NuINu (??) on 25-Май-07, 11:36 

>Это я знаю. Но как совместить функции :-(

Ну мог бы и сам! раз знаешь, ну ладно смотри:
0x185A87CEA  110000101101010000111110011101010
0x6B2395E0    1101011001000111001010111100000
------------------------------------------------xor
0x1EE8BE90A  111101110100010111110100100001010        
perl          10010100110111000110101000011111         2497473055

здесь все ясно - отбросили старший бит.
javascript    11101110100010111110100100001010         -292820726    

perl работает так
bash-3.00$ ./bag_hex_xor32.pl 6537379050 1797494240
first: 6537379050 =      6537379050
second: 1797494240=      1797494240
after $w1 &= 0xfffffffff;
first: 6537379050 =      4294967295  < !!!! перл оставляет максимум от числа, этот максимум потом используется при хор!!!
second: 1797494240=      1797494240

first rez = 2497473055   !!!!!!! rez как раз получается после хор между аргументами
maxnum = 4294967295, halfmax = 2147483647
negative rez = -1797494241
2497473055 =     '94DC6A1F'

dec:  8297113866

теперь как сделать:
вот кусок программы(фактически основная часть тестов):
....
my $maxnum = 0xffffffff;
my $maxhalf = $maxnum>>1;
$w1 = normal( $w1);
$w2 = normal( $w2);
print "first: $word1 =\t $w1\n";
print "second: $word2=\t $w2\n";

$rez= $w1^$w2;
#print $w1^$w2;
print "first rez = ".$rez."\n";
print "maxnum = $maxnum, halfmax = $maxhalf\n";
  if($rez >= $maxhalf)
  {
      $rez = -($maxnum-$rez+1);
      print "negative rez = $rez\n";
      $rez = $maxnum+$rez+1;
  }
  my $si = sprintf "%08X", $rez;
  print  "$rez =\t '$si'\n";
exit(0);


sub normal {
  my $a = shift;
  my $rez;
  if($a > $maxnum) {
    $rez = $a % $maxnum;
    --$rez;
  } else {
    $rez = $a;
  }
  return $rez
}

ну и результат:
bash-3.00$ ./bag_hex_xor32.pl 6537379050 1797494240
first: 6537379050 =      6537379050
second: 1797494240=      1797494240
first: 6537379050 =      2242411754
second: 1797494240=      1797494240
first rez = 4002146570
maxnum = 4294967295, halfmax = 2147483647
negative rez = -292820726
4002146570 =     'EE8BE90A'


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Помогите данный JavaScript перевести на perl"  
Сообщение от NuINu (??) on 25-Май-07, 11:43 

>ну и результат:
>bash-3.00$ ./bag_hex_xor32.pl 6537379050 1797494240
>first: 6537379050 =      6537379050
>second: 1797494240=      1797494240
>first: 6537379050 =      2242411754
>second: 1797494240=      1797494240
>first rez = 4002146570
>maxnum = 4294967295, halfmax = 2147483647
>negative rez = -292820726
>4002146570 =     'EE8BE90A'

;-))) забыл добавить, теперь обе программы работают одинаково... одинаково неправильно ;-))
если тебя это интересовало.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Помогите данный JavaScript перевести на perl"  
Сообщение от vic (??) on 24-Май-07, 17:28 
>Помогите данный JavaScript перевести на perl
>
>function foo(word1,word2) {
>    var rez=word1^word2;
>    var max32=0xffffffff;
>    if ( rez < 0 ) rez =
>max32 + 1 + rez;
>    return rez;
>}

мысль:
32 или 64 битные машинки?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Помогите данный JavaScript перевести на perl"  
Сообщение от filin email(??) on 24-Май-07, 18:06 
>>Помогите данный JavaScript перевести на perl
>>
>>function foo(word1,word2) {
>>    var rez=word1^word2;
>>    var max32=0xffffffff;
>>    if ( rez < 0 ) rez =
>>max32 + 1 + rez;
>>    return rez;
>>}
>
>мысль:
>32 или 64 битные машинки?

32битные

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру