PERL中pop函数的位操作等价物(删除MSB)

PERL中pop函数的位操作等价物(删除MSB),perl,bit-manipulation,bitvector,Perl,Bit Manipulation,Bitvector,在Perl中,是否有一个类似于>的按位运算符,但会删除最重要的位?有点像>操作符有点像shift()函数,我正在寻找一个类似pop()的位操作符 110110将返回10110 101将返回01 最后,我试图确定二进制形式的数字是否是回文的(即11011、111或1010101),因此理想情况下,运算符将有一种返回它删除的位的方法。如果操作符不这样做也没关系,正如我在数学上所做的那样,但是为了干净的代码,如果它自动返回MSB就太棒了。对于LSB,我知道 $LSB=$mynum-2*($mynum>

在Perl中,是否有一个类似于
>
的按位运算符,但会删除最重要的位?有点像
>
操作符有点像
shift()
函数,我正在寻找一个类似
pop()
的位操作符

110110
将返回
10110

101
将返回
01

最后,我试图确定二进制形式的数字是否是回文的(即11011、111或1010101),因此理想情况下,运算符将有一种返回它删除的位的方法。如果操作符不这样做也没关系,正如我在数学上所做的那样,但是为了干净的代码,如果它自动返回MSB就太棒了。对于LSB,我知道

$LSB=$mynum-2*($mynum>>1);
$mynum>>=1;

请参见

请参见

我想不出比将其存储为字符串更简单的方法:

my $bits = sprintf '%b', $num;
while ( $bits =~ s/(.)// ) {
    print "removed $1\n";
}
虽然你的回文支票只是

$bits eq reverse $bits

我想不出比将其存储为字符串更简单的方法:

my $bits = sprintf '%b', $num;
while ( $bits =~ s/(.)// ) {
    print "removed $1\n";
}
虽然你的回文支票只是

$bits eq reverse $bits

我不知道Perl,但在C/C++中,您可以这样做:

unsigned flp2(unsigned x) {
   x = x | (x >> 1);
   x = x | (x >> 2);
   x = x | (x >> 4);
   x = x | (x >> 8);
   x = x | (x >>16);
   return x - (x >> 1);
}

unsigned most_significant_bit = flp2(my_number);
my_number &= most_significant_bit;
感谢黑客的喜悦


请注意,要在汇编程序中找到最重要的位,可以使用BSR、MSVC中的位扫描反转、GCC中的内置clz。然而,据我所知,没有简单的高级(便携式)操作员。语言的发展速度比CPU和编译器慢得多。

我不知道Perl,但在C/C++中,您可以这样做:

unsigned flp2(unsigned x) {
   x = x | (x >> 1);
   x = x | (x >> 2);
   x = x | (x >> 4);
   x = x | (x >> 8);
   x = x | (x >>16);
   return x - (x >> 1);
}

unsigned most_significant_bit = flp2(my_number);
my_number &= most_significant_bit;
感谢黑客的喜悦


请注意,要在汇编程序中找到最重要的位,可以使用BSR、MSVC中的位扫描反转、GCC中的内置clz。然而,据我所知,没有简单的高级(便携式)操作员。语言的发展速度比CPU和编译器慢得多。

由于值的位数可变,因此需要位字符串或位向量。查看CPAN--它似乎仍然处于活动状态


但是,正如其他人针对您的问题所建议的,仅处理普通的旧字符串可能更容易。

因为您的值具有可变的位数,所以您需要一个位字符串或位向量。查看CPAN--它似乎仍然处于活动状态


但是,正如其他人针对您的问题所建议的那样,处理简单的旧字符串可能更容易。

您知道,我花了太长时间寻找类似的东西,以至于找不到它。“在那个例子中字号是什么意思?”Ranting_Raven,我把它贴了出来,以防你错过它。WORDSIZE是你机器上一个单词的大小(我想)你知道,我花了很长时间寻找像那样的东西而没有找到它。“在那个例子中字号是什么意思?”Ranting_Raven,我把它贴了出来,以防你错过它。WORDSIZE是您机器上一个单词的大小(我假设)