C 7654 3210 1110 1111 = 0xEF = decimal 239 1 1101 1110 left shift one showing carry 1101 1110 result without carry = 0xDE = 222 #### #!/usr/bin/perl -w use strict; my $input = 0xEF; my $andMask = (2**(MSbit($input)+1))-1; printf ("%X\n", ($input<<1) & $andMask); ## prints DE sub MSbit ##returns power of 2 of MS bit { my $num = shift; my $bit =-1; while ($num != 0) { $num = $num >> 1; $bit++; } return $bit; } #### #!/usr/bin/perl -w use strict; my $input = 0xEF; #this is 239 in decimal my $mask = 0xFF; printf ("%X\n", $input<<1 & $mask); # prints DE which means 222 in decimal #### printf ("%X\n", 0xEF<<1 & 0xFF); # prints DE which means 222 in decimal