php 位运算和数组

  • 位运算php

  • 二进制html

所谓的二进制就是逢二进一(0,1),由于使用二进制只有0,1 俩个数,简单,易于电子方式实现,同时数组

,经过0,1组合能够表示任意一个数app

-》二进制有三个重要的概念函数

  1. 原码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

  

的补码 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);
?>

把俩个页面和在一块儿。。。

相关文章
相关标签/搜索