位运算php
二进制html
所谓的二进制就是逢二进一(0,1),由于使用二进制只有0,1 俩个数,简单,易于电子方式实现,同时数组
,经过0,1组合能够表示任意一个数app
-》二进制有三个重要的概念函数
原码post
用二进制来表示一个数,这个码就是原码。ui
1 ------> 原码 00000000 0000000 0000000 00000101 = 1*2的零次方+0*2的一次方+1* 2的二次方=1+0+4=5spa
2.负数的反码=它的原码符号位不变,其余的位取反(0->1,1->0)code
举例orm
-1
-1的原码 100000000 00000000 00000000 00000001
-1的反码 111111111 11111111 11111111 11111110
-1的补码 111111111 11111111 11111111 11111111
3.在计算机运算的时候,都是以补码方式来运算的
这句话意思就是,无论一个数是正数仍是负数,都要被转成补码,而后进行运算
位运算一览表
例子
该图的前面四个是位运算
其运算规则是:
按位与 &:俩位全为1,结果为1
按位或 |:俩位有一个为1,结果为1
按位异或^:两位一个为0,一个为1,结果为1
按位取反:0->1,1->0
看看前面给出的题,是否完成
~2=?
步骤:首先要求出2的补码
2是正数,因此原码=反码=补码
2原码
00000000 00000000 00000000 00000010
~2
11111111 11111111 11111111 11111101 (补码)->原码
? 负数的 原码-》反码-》补码
11111111 11111111 11111111 11111101->
推出其反码 (对补码-1)
11111111 11111111 11111111 11111100
推出原码
10000000 00000000 00000000 0000011 -> -3
~-5=?
-5 的 补码找出来.
-5 原码 10000000 00000000 00000000 00000101
-5 反码 11111111 11111111 11111111 11111010
-5 补码 11111111 11111111 11111111 11111011
~-5取反 00000000 00000000 00000000 00000100 (补码)
4
2&3=?
2&3 首先要找到 2 和 3的补码
2 的补码 00000000 00000000 00000000 00000010
3 的补码 00000000 00000000 00000000 00000011
2&3 00000000 00000000 00000000 00000010 [补码]
2|3=?
2 的补码 00000000 00000000 00000000 00000010
3 的补码 00000000 00000000 00000000 00000011
2|3 00000000 00000000 00000000 00000011
2^3
2 的补码 00000000 00000000 00000000 00000010
3 的补码 00000000 00000000 00000000 00000011
2^3 00000000 00000000 00000000 00000001
13&7=?
5|4=?
-3^3=?
是
位移运算i
在php中位运算有俩种>>(右移)<<(左移)
运算的规则是:
算术右移:低位溢出,符号位不变,并用符号位补溢出的高位
算术左移:符号位不变,低位补0
根据咱们前面的规范,来完成几个案例
$a=1>>2;
1的补码
00000000 00000000 00000000 00000001
1>>2
00000000 00000000 00000000 00000000
$b=-1>>2;
步骤-1的补码
-1的原码 10000000 00000000 00000000 00000001
-1的反码 11111111 11111111 11111111 11111110
-1的补码 11111111 11111111 11111111 11111111
-1>>2
11111111 11111111 11111111 11111111 补码
结果
补码->原码
反码 11111111 11111111 11111111 11111110
原码 10000000 00000000 00000000 00000001
$c=1<<2;
1<<2
1的补码
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000100
$d=-1<<2;
10进制->2进制
7对除2
数组
提出一个问题?
一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg 请问这六只鸡的
整体重是多少?平均体重是多少?请你如今掌握的技术编一个程序。
如今咱们使用现有的技术来解决问题
array01.php
$hen1=3; $hen2=5; $hen3=1; $hen4=3.4; $hen5=2; $hen6=50;
若是咱们的变量不少,若是咱们分别取变量名,显示程序没法控制。
怎么办?
咱们能够使用一个新的数据类型array数组,来统一管理这一组数
什么事数组
能够用于存放多个数据的数据类型,咱们称为数组
快速体验案例:用数组来解决养鸡场的问题
//使用数组来完成案例 $hens[0]=3; $hens[1]=5; $hens[2]=1; $hens[3]=3.4; $hens[4]=2; $hens[5]=50; $hens[6]=30; $allWeight=0; //遍历整个数组 //有时为了知道某个数组共有多少个元素,能够使用系统函数count echo "共有".count($hens)."只鸡<br/>"; for($i;$i<count($hens);$i++){ echo "第".($i+1)."只鸡体重=".$hens[$i]."<br/>"; $allWeight+=$hens[$i]; } echo '<br/>整体重是='.'$allWeight'.'平均体重='.$allWeight/count($hens);
小结:该案例重点说明数组基本使用,细节后面说
数组建立
在php中,数组就是关键字和值的集合,咱们能够这样建立
①建立数组
$arr[0]=123; $arr[1]=90; $arr[2]=8;
几个概念:
[0]->这个咱们称为下标,或者称为关键字
$arr[0]-> 这个称为数组的一个元素。
$arr[0]=123;123表示该$arr[0] 元素对应的值
$arr->这个是该数组的名称。
在php数组中,元素存放的值是任意数据数据类型,
举例说明:
<?php $arr[0]=123; $arr[1]="hello"; $arr[2]=45.6; $arr[3]=true; $arr[4]=null;//即便放入了一个null,也要占一个空间 echo "数组大小".count($arr); //遍历一下 for($i=1;$i<count($arr);$i++){ echo '<br/>'.$arr[$i]; } ?>
② 建立数组的第二种方法
基本语法
$数组名=array(值,。。。。);
举例说明:
$arr=array(1,90,"hello",89.5);
//遍历一遍
for($i=0;$i<count($arr);$i++){
echo“<br/>".$arr[$i];
}
③第三种方式建立数组(在默认状况下,咱们的元素的下标,是从0开始给你编号,可是实际上
,也能够本身指定)
基本语法
$arr['logo']="北京";
$arr['hsp']=123;
.....
或者
$arr=array("logo"=>"北京","hsp"=>123,4=>678);
案例演示:
$arr[0]=123; $arr[1]=90; //遍历 /* for($i=0;$i=count($arr);$i++){ echo '<br/>'.$arr[$i]; }*/ //这个foreach 适用范围更广 foreach($arr as $key2=>$val2){ echo $key2."=".$val2."<br/>"; }
-》注意事项
①若是咱们建立一个数组的时候,没有给某个元素指定下标,php就会自动的用目前最大的那个
个下标值(整数),加上一做为该元素的下标(关键字)
$arr=array(5=>"logo",567,90); //我要访问“logo”这个值 echo $arr[5]; echo "<br/>".$arr[6];
②若是咱们给某个元素的下标同样,则会儿覆盖原来的值;
$arr = array(5=>"logo",567,90); //我要访问"logo"这个值 $arr[5]="yes";//替换某个元素值 echo $arr[0]; echo "<br/>".$arr[null];
③若是咱们使用true,false null 做为key,则应当怎样访问
$arr[true]="hello";//==>$arr[1] $arr[false]="world";//==>$arr[0] $arr[null]="北京";//==>$arr[null]或者$arr[""]; //null<==>"" echo $rr[0]; echo "<br/>".$arr[null];
④//咱们一般能够使用print_r来显示这个数组状况
print_r($arr); echo"<br/>"; //var_dump 能够更加详细的显示数组的信息 var_dump($arr);
⑤访问数组的时候,不要越界好比:
$arr=array(56,100,101); echo $arr[2];//数组越界 echo "hello";
一维数组的引用
基本语法:
$数组名[键值];
若是你写的键值不存在,则会报告:
Notice:Unefined offset
一维数组使用陷阱
//********一维数组引用陷阱
$arr[bar]="hell0,world";
echo $arr[bar];
这样使用时危险!!!
php的数组能够动态的增加
$a=array(2,3);
//这里说明php的数组是能够动态增加。
$a[3]=56;
echo $a[2];
php的数组相关的函数说明
①count 函数
基本用法是
count($数组名);能够统计该数组共有多少元素。
②is_array
③print_r和var_dump
④explode 对字符串进行分割
案例:
$str="北京&顺平&天津&宋江&林冲";
//在实际开发中,涉及到字符串的拆分,能够考虑
$arr=explode("&",$str);
print_r($arr);
php 数组变量的四个方法
-》若是使用for while do...while 要肯定该数组的下标是从0开始顺序排放
$colors=array('red','blue','green','yellow'); //for while do_while //for for($i=0;$i<count($colors);$i++){ echo "<br/>".$color[$i]; } //while $i=0;//循环控制变量 while($i<count($colors)){ echo"<br/>".$color[$i]; $i++; } //do...while $i=0;//循环控制变量 do{ echo"<br/>".$color[$i]; $i++; }while($i<count($colors)); //foreach echo"<br/>********"; foreach($colors as $k=>$v){ echo"<br/>$k=$v"; }
使用unset 函数 能够销毁某个元素,也能够销毁某个变量,销毁该元素后,关键字不会从新组合。
$arr[0]=123; $arr[1]=456; $arr[2]="hello"; //好比如今我要删除$arr[1]元素 echo"<br/>**删除前******"; echo $arr[1]; unset($arr[1]); echo"<br/>**删除后****"; echo $arr[1]; echo print_r($arr);
数组运算符
$a=array("a"=>"apple","b"="banana"); $b=array("a"=>"pear","b"=>"strawberry","c"=>"cherry"); $c=$a+$b;//$b数组的键和值加到$a echo"\$a+\$b result<br/>"; var_dump($c);//"a"=>"pear","b"="strawberry","c"="cherry" echo"\$b+\$a result<br/>"; var_dump($c);
数组的案例:
为增强你们对数组的理解,咱们再给你们出一个题,咱们一块儿完成。在运动会上,五个小孩
比赛轮滑,他们的滑完100米,分别用了10S、12S、5.7S、9s、14s,请编写一个程序,计算他们的
平均时间?
array03.php 时间保留到小数点后两位
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <h1>请输入五个小孩的成绩,用空格隔开</h1> <form action="result2.php" method="post"> <input type="text" name="grade"/> <input type="submit" value="开始统计"/> </form> </body> </html>
result2.php
<?php $grades=$_REQUEST['grade']; //echo 'grade='.$grades; //拆分,对成绩进行分割 $grades=explode("",$grades); $allGrades=0; //遍历 foreach($grades as $k=>$v){ $allGrades+=$v;//隐藏转换 string->float } echo"平均时间是=".$allGrades/count($grades); ?>
把俩个页面和在一块儿。。。