sub rshift {int($_[0]/(1<<$_[1])+($_[0]<0?-0.5:0.5))} for (2140837940,-1934825877,-2004116368,1978483312,-293893010) { print "$_ >> 8 = ",rshift($_,8),"\n" } __END__ 2140837940 >> 8 = 8362648 -1934825877 >> 8 = -7557914 -2004116368 >> 8 = -7828580 1978483312 >> 8 = 7728450 -293893010 >> 8 = -1148020