如何查看某个值的所有活动位?
How to view all active bits for a certain value?
Bitwise operators are those strange looking operators that may look hard to understand...
好吧,他们对我来说不再陌生,但我们也不是永远最好的朋友。 (也许在遥远的未来)。
在使用按位运算符时,我经常发现自己想知道实际设置了哪些位。这让我想知道 PHP 是否有某种功能来查看哪些位对于某个值是活动的。我用谷歌搜索了一下,但找不到。
所以我的最后一个问题是:有没有办法查看某个数字的所有活动位?
What do you mean by active bits?
使用按位运算符将整数转换为二进制数。
一个例子:
16
00010000
35
00100011
我正在寻找这样的东西:
var_dump(showBits(35));
这应该是 return 1、2 和 6,因为它们是活动位。
快速一行:
$result = array_keys(array_filter(array_reverse(str_split(decbin(35)."0"))));
print_r($result);
Array
(
[0] => 1
[1] => 2
[2] => 6
)
如果您希望看到它们的索引为零,请放弃 ."0"
,例如[0, 1, 5]
.
我不确定我是否理解您的要求,但您可以按如下方式将数字转换为二进制表示形式:
$n = 12345678;
$b = base_convert("$n",10,2); // $b = "101111000110000101001110"
请注意 $n
两边的引号 — base_convert()
函数希望将数字作为字符串传递。参数 10
和 2
是您要转换的数字基数。
编辑
根据您的说明,这是一个将整数转换为对应于非零位的值数组的函数:
function showBits($n) {
$b = base_convert("$n",10,2);
$a = array();
for ($j=1,$i=strlen($b)-1;$i>=0;$j++,$i--) {
if ($b[$i]=="1") $a[]=$j;
}
return $a;
}
// Example of use:
var_dump(showBits(35));
我想您必须编写自己的函数来执行此操作,例如:
$val = 35;
$bitsVal = strrev(base_convert($val,10,2));
$activeBits = [];
foreach (str_split($bitsVal) as $key => $bit) {
if ($bit == 1) $activeBits[] = $key; // $key + 1 depending on what you want
}
print_r($activeBits);
输出:
Array
(
[0] => 0 // 1
[1] => 1 // 2
[2] => 5 // 6 with $key + 1
)
Bitwise operators are those strange looking operators that may look hard to understand...
好吧,他们对我来说不再陌生,但我们也不是永远最好的朋友。 (也许在遥远的未来)。
在使用按位运算符时,我经常发现自己想知道实际设置了哪些位。这让我想知道 PHP 是否有某种功能来查看哪些位对于某个值是活动的。我用谷歌搜索了一下,但找不到。
所以我的最后一个问题是:有没有办法查看某个数字的所有活动位?
What do you mean by active bits?
使用按位运算符将整数转换为二进制数。
一个例子:
16
00010000
35
00100011
我正在寻找这样的东西:
var_dump(showBits(35));
这应该是 return 1、2 和 6,因为它们是活动位。
快速一行:
$result = array_keys(array_filter(array_reverse(str_split(decbin(35)."0"))));
print_r($result);
Array
(
[0] => 1
[1] => 2
[2] => 6
)
如果您希望看到它们的索引为零,请放弃 ."0"
,例如[0, 1, 5]
.
我不确定我是否理解您的要求,但您可以按如下方式将数字转换为二进制表示形式:
$n = 12345678;
$b = base_convert("$n",10,2); // $b = "101111000110000101001110"
请注意 $n
两边的引号 — base_convert()
函数希望将数字作为字符串传递。参数 10
和 2
是您要转换的数字基数。
编辑
根据您的说明,这是一个将整数转换为对应于非零位的值数组的函数:
function showBits($n) {
$b = base_convert("$n",10,2);
$a = array();
for ($j=1,$i=strlen($b)-1;$i>=0;$j++,$i--) {
if ($b[$i]=="1") $a[]=$j;
}
return $a;
}
// Example of use:
var_dump(showBits(35));
我想您必须编写自己的函数来执行此操作,例如:
$val = 35;
$bitsVal = strrev(base_convert($val,10,2));
$activeBits = [];
foreach (str_split($bitsVal) as $key => $bit) {
if ($bit == 1) $activeBits[] = $key; // $key + 1 depending on what you want
}
print_r($activeBits);
输出:
Array
(
[0] => 0 // 1
[1] => 1 // 2
[2] => 5 // 6 with $key + 1
)