与二进制数相反

时间:2013-07-24 12:24:46

标签: php binary

我有二进制数11000我需要翻转数字才能得到答案00111 我需要PHP中的结果,我使用for循环,但我怎么能使用按位运算符我认为我们可以使用^运算符这里是PHP解决方案:

function getIntegerComplement($n) {
    // $n is a decimal number
    $binary = decbin($n);
    $arr = str_split($binary);  

    $complement = "";
    foreach($arr as $i)
      $complement .= ($i == 0) ? (1) : (0);
}

任何帮助都是适当的

3 个答案:

答案 0 :(得分:3)

如果你否定整个int,你将得到一个负数:因为int由32位(通常)组成,并且所有这些都将被否定。当第一位变为1时,php会将其视为负数。而你想要否定最后5位。在这里完成,使用$ val + $ mask(mod 2):

<?php
$val = bindec('11000');
$mask = bindec('11111');
$val = $val ^ $mask;

print sprintf('%05d', decbin($val));

按照预期打印00111。

答案 1 :(得分:1)

使用bitwise NOT operator:

return ~$n;

答案 2 :(得分:0)

使用“NOT”(〜)。 它反转了提供的值:

function getIntegerComplement($n) {
return ~$n;
}

此处有更多信息:http://php.net/manual/en/language.operators.bitwise.php

  

〜$ a ---&gt;不:未设置$ a中设置的位,反之亦然。