in reply to left shift problem

Other people have shown you how to pack it. If you have irregular bit margins (shifts of 31, 32, 33), you might want to do the shifts using big integers:

#!/usr/bin/perl use warnings; use strict; use Math::BigInt; my $num = Math::BigInt->new('0x01'); my $mask1 = Math::BigInt->new('0x0FFFFFFFF')->blsft(32); my $mask2 = Math::BigInt->new('0x0FFFFFFFF'); print "Number : ", $num->as_hex(), "\n"; $num->blsft(32); print "Num shifted : ", $num->as_hex(), "\n"; # # Split result into something that can be packed. # my $highorder = $num->copy()->band($mask1)->brsft(32); my $loworder = $num->copy()->band($mask2); print "High bits : ", $highorder->numify(), "\n"; print "Low bits : ", $loworder->numify(), "\n";
And the output is:

C:\Code>perl bigint_shift.pl Number : 0x1 Num shifted : 0x100000000 High bits : 1 Low bits : 0