in reply to Perl's bad at arithmetic?
Yeah, that's certainly surprising. But when I looked in the docs (perldoc perlop) it says that:
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. Either way, the implementation isn't going to generate results larger than the size of the integer type Perl was built with (32 bits or 64 bits).
The result of overflowing the range of the integers is undefined because it is undefined also in C. In other words, using 32-bit integers, 1 << 32 is undefined. Shifting by a negative number of bits is also undefined.
If you get tired of being subject to your platform's native integers, the use bigint pragma neatly sidesteps the issue altogether:
I was expecting that the 1 would shift off the end and leave you with all 0, rather than it wrapping back around.
...roboticus
When your only tool is a hammer, all problems look like your thumb.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Perl's bad at arithmetic?
by BrowserUk (Patriarch) on Mar 27, 2015 at 23:39 UTC | |
by roboticus (Chancellor) on Mar 28, 2015 at 00:04 UTC | |
by BrowserUk (Patriarch) on Mar 28, 2015 at 00:10 UTC |