gpt4 book ai didi

perl - 用于设置最低n位的表达式,即使n等于字长也可以使用

转载 作者:行者123 更新时间:2023-12-04 04:21:10 24 4
gpt4 key购买 nike

注意:这个问题的目的是更好地了解Perl的按位运算符。我知道以下所述的计算数字U的方法。

$i为非负整数。我正在寻找一个简单的表达式E<$i> 1,该表达式的计算结果为无符号int U,其$i的最低位均为1,其余位均为0。例如。 E<8>应该为255。特别是,如果$i等于机器的字长(W),则E<$i>应该等于~0 2。

表达式(1 << $i) - 1~(~0 << $i)都做正确的事情,除了$i等于W时,在这种情况下,它们都采用0值,而不是~0

我正在寻找一种不需要先计算W的方法。

编辑:好的,我想到了一个丑陋的解决方案

$i < 1 ? 0 : do { my $j = 1 << $i - 1; $j < $j << 1 ? ( $j << 1 ) - 1 : ~0 }

或者
$i < 1 ? 0 : ( 1 << ( $i - 1 ) ) < ( 1 << $i ) ? ( 1 << $i ) - 1 : ~0

(当然,这也是不切实际的。)

1我使用奇怪的符号 E<$i>作为“基于 $i的表达”的简写。

2目前,我对在 E<$i>严格大于W时应该对 $i进行评估没有强烈的偏好。

最佳答案

eval($Config{nv_overflows_integers_at}) >= 2**($Config{ptrsize*8})(不包括使用 double 浮点数和64位int的代码)的系统上,

2**$i - 1

在所有系统上
( int(2**$i) - 1 )|0
  • 当i int会将NV转换为IV/UV,从而使得减法在NV精度小于UV大小的系统上工作。 |0在这种情况下不起作用。
  • 当i≥W时,int无效,因此减法无效。因此|0溢出,在这种情况下,Perl返回最大的整数。

  • 我不知道|0行为的可靠性如何。它可能是特定于编译器的。不要使用这个!

    关于perl - 用于设置最低n位的表达式,即使n等于字长也可以使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35949265/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com