题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
<?php
function NumberOf1($n)
{
$count = 0;
for($i = 0;$i <32;$i++){
if(($n >> $i) & 1){
$count++;
}
}
return $count;
}
//另一种思路 但是没做出来
function NumberOf1($n)
{
//如果是0,直接返回0
if($n==0){
return 0;
}
//如果是整数,用函数
if($n>0){
$res=decbin($n);
var_dump($res);exit();
/*将二进制转换成字符串
$str=strval($res);*/
//匹配
/*$result=substr_count($res,'1');
return $result;
}*/
//如果是负数
/* if($n<0){
$a=abs($n);//取绝对值
$b=decbin(~$a);//按位取反
//if($b==)
$c=strlen($b);
var_dump($b);exit();
//字符串翻转
$d=strrev($b);
//字符串转换成数组
$e=str_split($d);
//echo $e[0];exit();
$flag=1;
for ($i=0; $i < $c; $i++) {
if($e[$i]==1){
if($flag==1){
$e[$i]=0;
$flag=1;
}
}
if($e[$i]==0){
if($flag==1){
$e[$i]=1;
$flag=0;
}
}
}
//再讲数组转换成字符串
$f=implode("", $e);
//在此将字符串翻转回来
$res=strrev($f);
$result=substr_count($res,'1');
return $result;
}
}