我有二进制数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);
}
任何帮助都是适当的
答案 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)
return ~$n;
答案 2 :(得分:0)
使用“NOT”(〜)。 它反转了提供的值:
function getIntegerComplement($n) {
return ~$n;
}
此处有更多信息:http://php.net/manual/en/language.operators.bitwise.php
〜$ a ---&gt;不:未设置$ a中设置的位,反之亦然。