六、灯泡开关的判断
来源:互联网 发布:网络贷款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>";
?>
- 六、灯泡开关的判断
- 灯泡开关
- 灯泡开关
- 灯泡开关
- 开关和灯泡的对应关系
- 开关和灯泡的对应关系
- 100盏灯泡的开关问题
- 开关和灯泡的对应关系
- 100盏灯泡的开关问题
- 100盏灯泡的开关问题
- 100盏灯泡的开关问题
- 开关和灯泡问题
- js特效-开关灯泡
- vijosP1447 开关灯泡
- 灯泡开关案例
- 百度笔试题-100盏灯泡的开关问题
- 开关和灯泡的对应关系-二进制编码
- 使用SDL编写一个拖动开关点亮灯泡的程序
- 关于hash_map和map的不同和用法
- TCP/IP协议:概述
- 《编程之美》学习笔记——2.2不要被阶乘吓倒
- 写个我自己_toWZ_2015_01_11
- codeforces #496C# Removing Columns
- 六、灯泡开关的判断
- Python 重新 import 模块——reload()
- 1003. Width of Binary Trees
- 关于string和stringstream的用法
- 一个小菜程序员的经历
- Android任务和返回栈完全解析,细数那些你所不知道的细节
- 学习笔记二:关于Java中命名和类名
- 关于python的类
- 周末下午的记录