Duk*_*eto 2 perl bit-manipulation
这必须在Perl中完成:
我有大约30_146_890_129和17_181_116_691和21_478_705_663的整数。
这些应该由6个字节组成,其中:
abc我想隔离出什么是价值a。我如何在Perl中做到这一点?
我试过使用>>运算符:
perl -e '$a = 330971351478 >> 16; print "$a\n";'
5050222
Run Code Online (Sandbox Code Playgroud)
perl -e '$a = 17181116691 >> 16; print "$a\n";'
262163
Run Code Online (Sandbox Code Playgroud)
但是这些数字并不符合我的期望,更像是0-1000。
如果我也能获得价值b,c但我真的不需要那些,那是奖励。
谢谢!
number >> 16返回number移位16位,而不是您似乎假设的移位位。要获取最后16位,您可以使用number % 2**16或number & 0xffff。要到达b,c您可以在获取最后16位之前进行移位,即
$a = $number & 0xffff;
$b = ($number >> 16) & 0xffff;
$c = ($number >> 32) & 0xffff;
Run Code Online (Sandbox Code Playgroud)