Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re^3: reproducing javascripts >> operator

by shmem (Chancellor)
on Mar 20, 2015 at 17:05 UTC ( #1120772=note: print w/replies, xml ) Need Help??

in reply to Re^2: reproducing javascripts >> operator
in thread reproducing javascripts >> operator

The actual problem I'm having is the script below works on a 32 bit perl and does not on a 64 bit perl

At least rshift() fixes the different-output issue; it works

# 32bit: perl -e 'printf"%vd\n",$^V; do pop' 5.8.8 98 xxx:eeee:YRM1k2jP:1749307403 # 64bit: perl -e 'printf"%vd\n",$^V; do pop' 5.14.2 98 xxx:eeee:YRM1k2jP:1749307403

...for some value of "works". The 98 ostensibly comes from the line

say $t if $i == 0;

...and something else besides that may need to be fixed. Your turn.

perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

Replies are listed 'Best First'.
Re^4: reproducing javascripts >> operator
by mje (Curate) on Mar 20, 2015 at 17:14 UTC

    Thanks, I worked it.

    A 64 bit number which when you look at the low 32 bits is positive is shifted 8 bits right differently in 64 bit world to the same 32 bits in 32 bit land i.e., 0xffffffff01111111 in 64 bit land is shifted 8 bits right and shifts ff into the lower 32 bits whereas 0x11111111 shifted right in 32 bit land has 00 shifted into the left.

    I managed to keep the original code with use integer and perl's >> by adding

    my $to_shift = $crc; if (($crc & 0x80000000) != 0) { $to_shift |= 0xffffffff00000000; } else { $to_shift &= 0x00000000ffffffff; } $to_shift = $to_shift >> 8;

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1120772]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (9)
As of 2020-11-30 14:34 GMT
Find Nodes?
    Voting Booth?

    No recent polls found