in reply to Re: 64 bit perl
in thread 64 bit perl

2147483648 * 2 = 4294967296
9223372036854775808 = 2^64

s0o on a 32-bit machine it prints 2147483648

I understand

1 << 63; # returns 2^64

But how is $/ effecting it?
Is it slurping in the highest possible value, and if it cannot get the whole thing it breaks it into pieces?

Replies are listed 'Best First'.
Re^3: 64 bit perl
by Zaxo (Archbishop) on Jun 02, 2005 at 07:47 UTC

    $/ is just a newline by default. It's there to break the line and set the next shell prompt back to the far left of the screen.

    On 32-bit perl,

    $ perl -e'print 1<<$_, $/ for 28..36' 268435456 536870912 1073741824 2147483648 1 2 4 8 16 $
    Perl 1<<$n is equivalent to 2**$n, not 2**($n+1). The << operator is regarded as bitwise by perl, so forces the result into a bitfield, an unsigned int. As in C, an overflowed int wraps to its low bits[What was I thinking there?]. On 64-bit perl, the above gives,
    $ perl -e'print 1<<$_, $/ for 28..36' 268435456 536870912 1073741824 2147483648 4294967296 8589934592 17179869184 34359738368 68719476736 $
    For both 32- and 64-bit Perl, 1<<64 == 1.

    After Compline,
    Zaxo

      For both 32- and 64-bit Perl, 1<<64 == 1.

      1<<64 is the same as in C, but is that always 1? I'd think it's system-dependent, but I'm not really sure.

Re^3: 64 bit perl
by BrowserUk (Patriarch) on Jun 02, 2005 at 07:43 UTC

    $/ is just adding a newline to the end of the print statement.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.