2

我有一个二进制数 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);
}

任何帮助都会得到帮助

4

3 回答 3

3

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

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

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

正如预期的那样打印 00111。

于 2013-07-24T12:31:48.363 回答
2

使用按位 NOT 运算符:

return ~$n;
于 2013-07-24T12:28:27.433 回答
0

使用“不”(~)。它反转提供的值:

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

更多信息在这里: http: //php.net/manual/en/language.operators.bitwise.php

~ $a ---> Not:在 $a 中设置的位未设置,反之亦然。

于 2013-07-24T12:32:28.837 回答