欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

位运算符——管理事务的开关状态

程序员文章站 2022-07-09 18:37:10
1,什么是开关状态 现实中,有很多数据都是只有两种结果(值)的,对应的其实就是我们的布尔类型的值。 这里,所谓的管理一组事务的开关状态,应该理解为其实就是管理若干个只有2个状态的“数据符号”。 比如:有5个灯泡,对应5个状态数据。这5个灯泡,就有25 种状态呢 这里的管理目标是:使用一个变量,就可以 ......

1,什么是开关状态

  现实中,有很多数据都是只有两种结果(值)的,对应的其实就是我们的布尔类型的值。

这里,所谓的管理一组事务的开关状态,应该理解为其实就是管理若干个只有2个状态的“数据符号”。

  比如:有5个灯泡,对应5个状态数据。这5个灯泡,就有25 种状态呢

这里的管理目标是:使用一个变量,就可以表达若干个数据的“当前状态”。具体有3个任务:

  1、通过该变量,可以获知任何一个数据(灯泡)的当前状态。

  2、通过该变量,可以将一个一个数据的状态“关闭”;

  3、通过该变量,可以将一个一个数据的状态“开启”;

<?php
//假设,有5个灯泡需要管理,需要实现以下的功能目标
//1,可以指定任意一个灯泡的“当前状态”
//2,可以打开指定的任意一个灯泡

//首先,需要设定对应的5个常量,代表对应的5个灯泡

define("D1" ,1);    //对应的二进制值为:00000001
define("D2" ,2);    //对应的二进制值为:00000010
define("D3" ,4);    //对应的二进制值为:00000100
define("D4" ,8);    //对应的二进制值为:00001000
define("D5" ,16);   //对应的二进制值为:00010000
//更多的灯,也按此规律定义常量值!!!

//然后,定义一个变量,该变量就代表这5个灯泡的“任意组合状态”值;
$state = 10;   //其对应的为二进制值为:00001010
               //此时,它其实也表示第2个和第4个灯凉
//$state =7;   //其对应的为二进制值为:00000111
//$state =71;  //其对应的为二进制值为:00010001
//注意:以上3个赋值,只是表示$state的值可以是“任意的”

//任务1,可以指定任意一个灯泡的“当前状态”

//需求1a:请输入灯泡1的状态
//按此算法逻辑就可以判断灯1
//分析:
//$state的值为:00001010
//D1的值为    :00000001
//              &
//------------------------
//              00000000
if(($state & D1) >0){
    
    echo "<br />灯1是亮的";
}else
{
    echo "<br />灯1是灭的";
}

//需求1b:请输入灯泡2的状态;
if(($state & D2) >0){
    
    echo "<br />灯2是亮的";
}else
{
    echo "<br />灯2是灭的";
}

//写出方法,展示所有灯的整体显示
function ShowAll()
{
    echo "<p>";
    for($i=1;$i<=5;++$i)
    {
        $s = "D".$i;
        if(($GLOBALS['state'] & constant($s)) > 0)
        {
            echo "灯{$i}是亮的<br />";
        }else
        {
            echo "灯{$i}是灭的<br />";
        }
    }
    echo "</p>";
}
echo "<br />初始多有灯的状态:";
ShowAll();

//需求2,可以打开指定的任意一个灯泡
//也只要按照如下算法就可以打开:
//$state = $state |对应灯的常量值:

//需求2a:请打开灯3
$state = $state | D3;
echo "<br />灯3打开后:";
ShowAll();

//需求2b:请打开灯5:
$state = $state | D5;
echo "<br />灯5打开后:";
ShowAll();

//需求3,可以关闭指定的任意一个灯泡
//也只要按照如下算法就可以打开:
//$state = $state & (~对应灯的常量值):

//需求3a:请关闭灯2
$state = $state & (~D3);
echo "<br />灯3关闭后:";
ShowAll();

//需求3b:请关闭灯5
$state = $state & (~D5);
echo "<br />灯5关闭后:";
ShowAll();

//需求3c:请关闭灯1(其实该登本来就是关闭的)
$state = $state & (~D1);
echo "<br />灯1关闭后:";
ShowAll();