You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raku中如何实现二进制补码运算得到与Perl一致的结果

差异原因
  • Perl的按位取反运算符~默认按平台原生固定位宽(此处为64位)整型处理数值,运算时自动截断到对应位宽。传入的18446744073709551592等于2^64 - 24,在64位补码规则下取反加1,最终输出24。
  • Raku默认使用任意精度整数,无固定位宽限制,前缀按位取反运算符+^不做位宽截断,直接返回数学意义上的按位取反结果-(原值 + 1),因此直接运算会输出-18446744073709551593,与Perl结果不符。
对应Raku实现

两种写法都能得到和Perl完全一致的运算结果:

  • 手动执行64位截断,模拟Perl固定位宽运算逻辑:
$ raku -e "say ((+^18446744073709551592) + 1) +& (2**64 - 1)"
24

代码中+& (2**64 -1)的作用是仅保留运算结果的低64位,与Perl自动截断到64位整型的行为完全对齐。

  • 用Raku内置的64位无符号整型uint64做类型约束,位运算会自动按64位位宽执行,无需手动截断:
$ raku -e "say (+^ (my uint64 $ = 18446744073709551592)) + 1"
24

内容的提问来源于stack exchange,提问作者zentrunix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:06:17