2015-03-25 39 views
-1

位運算符是那些奇形怪狀的運營商,可能看起來很難理解......如何查看某個值的所有有效位?

那麼,他們並不陌生找我了,但我們不是最好的永遠的朋友無論是。 (也許在很遠的將來)。

在使用按位運算符時,我經常發現自己想知道實際設置了哪些位。這讓我想知道PHP是否有某種功能來查看哪些位對某個值有效。我搜索了一下,但找不到。

所以我的最後一個問題是:有沒有辦法查看某個數字的所有活動位?

你是什麼意思的有效位?

使用按位運算符將整數轉換爲二進制數。

一個例子:

16 
00010000 
35 
00100011 

我期待這樣的事情:

var_dump(showBits(35)); 

這應該返回1,2 ADN 6,因爲這些都是有效位。

回答

1

我想你必須編碼你自己的功能來做到這一點,如:

$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 
) 
+0

這似乎是一個很好的方法。 – Peter 2015-03-25 10:28:26

1

一個快速班輪:

$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]

0

我不知道我知道你要問什麼,但你可以在多種轉換成二進制表示如下:各地$n

$n = 12345678; 
$b = base_convert("$n",10,2); // $b = "101111000110000101001110" 

注意引號 - 的base_convert()函數希望數字作爲字符串傳遞。參數102是您要轉換的基數。


編輯

按照你澄清,下面是一個整數轉換成數值對應非零位的數組的函數:

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)); 
相關問題