我有一个大的十六进制数 - $num = 0x80000000
作为一个字符串.我想增加它,但hex($num)
由于整数溢出(出现负数),做不起作用.using bigint
也不是一个选项,因为bigint只在perl 5.10及更高版本中实现,我有5.8.我怎么能用这个字符串?
不要将文字表示与数字与实际值混淆.当你完成任务时,无论你如何表达它,Perl最终都会存储一个数字而不再关心原始表示.使用正常的数字操作.当您想再次查看它时,您可以选择您喜欢的任何表示形式:
$num = 0x8000000;
$num++;
printf "%0x" $num;
Run Code Online (Sandbox Code Playgroud)
只有hex()
在将数字表示作为字符串时才需要,就像从命令行参数中获取一样.您只需hex
将字符串转换为数字即可.在那之后,它是一样的.
$num = hex( '8000000' ); # or hex( '0x8000000' )
# $num = hex( $ARGV[0] );
$num++;
printf "%0x" $num;
Run Code Online (Sandbox Code Playgroud)
对于问题的其他部分,bignum
在Perl v5.8上运行得很好:
$ perl5.8.9 -le 'my $i = 0xFFFFFFFF_FFFFFFFF; $i++; print $i'
1.84467440737096e+19
$ perl5.8.9 -Mbignum -le 'my $i = 0xFFFFFFFF_FFFFFFFF; $i++; print $i'
18446744073709551616
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
957 次 |
最近记录: |