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);
?>

把倆個頁面和在一塊兒。。。

相關文章
相關標籤/搜索