位運算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); ?>
把倆個頁面和在一塊兒。。。