六、灯泡开关的判断

来源:互联网 发布:网络贷款ppt 编辑:程序博客网 时间:2024/04/28 13:52


开关状态:就是某种数据,它只有2个值可用:true,false,1,0, 开,关。。。。。
一组事物是指,多个数据的的任意可能的出现状态。
我们假设有5个灯泡的开关需要管理:
1,确定每个灯泡的状态:开,关;
2,可以指定打开任意一个灯泡;
3,可以指定关闭任意一个灯泡。
设定前提:这5个灯泡有明确的顺序,我们将设定5个变量(常量其实也行)。
假设1-5个灯泡的位置是从右往左边数——对应数字的位数
第1个灯泡:$d1 = 1;  //00000001
第2个灯泡:$d2 = 2;  //00000010
第3个灯泡:$d3 = 4;  //00000100
第4个灯泡:$d4 = 8;  //00001000
第5个灯泡:$d1 = 16;  //00010000
则所有灯泡的总的状态,就可以使用一个变量来描述:比如:
如果$state = 7; //00000111 ,就表示第1,2,3灯泡亮
如果$state = 9; //00001001 ,就表示第1,4灯泡亮
如果$state = 13; //00001101 ,就表示第1,3,4灯泡亮

确定一个灯泡的开关状态:
$s1 =  $state & $dn; //这里n表示1-5之间的任意一个。
则结果如果$s1大于0,就表示该灯泡亮,否则就表示该灯泡是灭的。
打开指定的灯泡
$state = $state | $dn; //这里n表示1-5之间的任意一个
关闭指定的灯泡
$state = $state & ~$dn; //这里n表示1-5之间的任意一个


示例代码如下:

<?php
       const V1=1;   //二进制为0000 0001
       const V2=2;   //二进制为0000 0010
       const V3=4;   //二进制为0000 0100
       const V4=8;   //二进制为0000 1000
       const V5=16;  //二进制为0001 0000
       $state=13;    //二进制位0000 1101

//判断V1灯的状态

       $kaiguan=$state & V1;  //二进制为0000 0001 值为1
       if($kaiguan > 0){
                echo "V1灯亮";
            }else{
                echo "V1灯灭";
 }
           echo "<br/>";

//判断灯V2的状态
 $kaiguan=$state & V2; //二进制为0000 0000 值为0
 if($kaiguan > 0){
     echo "V2灯亮";
 }else{
     echo "V2灯灭";
 }
    echo "<p>";


 //输出所有灯泡的状态,调用函数
    showAll($state);

 //打开第2个灯泡,主要是修改第二个灯泡的状态
    $state=$state | V2;   //二进制为0000 1111
 echo "<br/>测试打开第二个灯泡之后";
 showAll($state);

    //关闭第1,3,灯泡
 $state=$state & ~V1;   //~V1二进制为1111 1110,状态二进制为0000 1100
 //这只是对开关的状态进行一下判断,还需要对$kaiguan=$state & V1作最终的开关判断
 $state=$state & ~V3;   //~V3二进制为1111 1011,状态二进制为0000 1001
 echo "<br/>测试关闭第1,3灯泡后的状态";
    showAll($state);

 function showAll($state){
 for($i=1;$i<=5;$i++){
      $temp="V" . $i;
   $kaiguan=$state & constant($temp);
   if($kaiguan>0){
      echo $temp."灯亮";
   }else{
      echo $temp."灯灭";
   }
 }
}

    echo "</p>";
?>

0 0
原创粉丝点击