一辜御、運(yùn)算符初步
1.介紹
運(yùn)算符連接操作數(shù)或者表達(dá)式蚀腿。
1)分類
- 按照操作數(shù)的數(shù)目:
單目運(yùn)算符: 操作數(shù)只有一個(gè) ++ --
雙目運(yùn)算符: 操作數(shù)只有兩個(gè) + - * /
三目運(yùn)算符: ?:
條件判斷贬芥?表達(dá)式1:表達(dá)式2
吃了么?喝點(diǎn)飲料:來(lái)塊面包
滿足條件,返回表達(dá)式1好芭,否則返回表達(dá)式2 - 按照功能來(lái)分:
算術(shù)運(yùn)算符: + - * / % (加減乘除 取余)
賦值運(yùn)算符: = ,賦值運(yùn)算表達(dá)式的值也就是所賦的值
image.png
自操作 ++ -- += -= *= /= %=
a = $a +2;
比較運(yùn)算符: > < >= <= == === != !==
邏輯運(yùn)算符: && || 逸月!
位運(yùn)算符:& | ~ ^ << >>
條件運(yùn)算符: 栓撞?:
字符串連接符: . (相當(dāng)于js里面的+)
錯(cuò)誤抑制符 :@
2)運(yùn)算符的優(yōu)先級(jí)
①算術(shù)運(yùn)算: 先乘除后加減。
②算術(shù)運(yùn)算符 > 比較運(yùn)算符 > 邏輯運(yùn)算符 > 賦值運(yùn)算符
③()去改變運(yùn)算的優(yōu)先級(jí)
二碗硬、運(yùn)算符進(jìn)階
1.特殊的運(yùn)算符
1)字符串連接符
. 遇到較長(zhǎng)的字符串可以先拼接再輸出
3)錯(cuò)誤抑制符
@放在表達(dá)式之前瓤湘,忽略錯(cuò)誤信息
可以放在變量,常量及函數(shù)的調(diào)用之前恩尾。
2.算術(shù)運(yùn)算符
1)加減乘除
+ - * /
2)取余運(yùn)算符%
1/2 0 1 1 是被除數(shù)弛说, 2 是除數(shù)
取余的結(jié)果,取決于被除數(shù)的符號(hào)翰意,與除數(shù)的符號(hào)無(wú)關(guān)木人。
3.自操作運(yùn)算符
++ ,--冀偶, +=醒第,-=,*= 等
1)++ -- 兩種使用方法
4.賦值運(yùn)算符
1)功能
將右側(cè)表達(dá)式的結(jié)果賦值給左側(cè)的變量进鸠。
2)右結(jié)合性
b =
c= 100;
第二步 c;
第三步 b
5.比較運(yùn)算符
1)介紹
< >= <= == != ===(全等) !==(不全等)
比較結(jié)果: true 或者false
特例:
如果兩個(gè)布爾值之間的比較稠曼。
image.png
2)除全等和不全等之外的比較運(yùn)算符的運(yùn)算原則
不同類型之間的比較,會(huì)出現(xiàn)類型的自動(dòng)轉(zhuǎn)換客年。
①字符串之間的大小比較遵循的原則
使用字符編碼比較(ASCII碼)霞幅;第一個(gè)字符能比較出來(lái)結(jié)果漠吻,后面的字符不進(jìn)行 比較。
②不同類型之間相互比較遵循的原則
如果比較的數(shù)據(jù)中有布爾值司恳,轉(zhuǎn)為布爾值進(jìn)行比較途乃。
否則,有數(shù)字值扔傅,就轉(zhuǎn)為數(shù)字值進(jìn)行比較耍共。
否則,如果兩邊都是純數(shù)字的字符串铅鲤,轉(zhuǎn)為數(shù)字進(jìn)行比較划提。
否則,就按字符串比較邢享。
3)===(全等)與==(等于)的區(qū)別
===判斷類型和值全部相等鹏往,才是全等
== 只判斷值,不判斷類型骇塘。
6.邏輯運(yùn)算符
與(&& and) 或(||, or) 非(R谅摹) 異或(xor)
1)運(yùn)算原則
與 :全真為真,其余為假
true && true 結(jié)果 true
true && false 結(jié)果 false
false && false 結(jié)果 false或 :全假為假款违,其余為真
true || true 結(jié)果 true
true || false 結(jié)果 true
false || false 結(jié)果 false非 : 非真即假唐瀑,非假即真
!true false
!false true;異或 :相同為假,不同為真
true xor true 結(jié)果 false
false xor false 結(jié)果 fasle
true xor false 結(jié)果 true
2)短路運(yùn)算
或運(yùn)算的短路運(yùn)算:
第一個(gè)表達(dá)式返回為true插爹。后面的表達(dá)式不執(zhí)行哄辣。
與運(yùn)算的短路運(yùn)算:
第一個(gè)條件為false,進(jìn)行短路運(yùn)算,后面的表達(dá)式不執(zhí)行赠尾。
3)短路運(yùn)算案例 常量定義
4)邏輯運(yùn)算符的優(yōu)先級(jí)
&&力穗,|| > = > and,or
7.條件運(yùn)算符(三元運(yùn)算符)?:
1)語(yǔ)法
條件表達(dá)式气嫁?表達(dá)式1:表達(dá)式2
條件成立当窗,返回表達(dá)式1,否則寸宵,返回表達(dá)式2
2)應(yīng)用
8.位運(yùn)算符(了解)
& | ~ ^ << >>
1)計(jì)算原則
& 按位與崖面,表示兩位都是1的時(shí)候返回1,否則返回0
| 按位或梯影,表示兩位都是0的時(shí)候返回0巫员,否則返回1
~ 按位非,非0即1甲棍,非1即0
^ 按位異或疏遏,兩位不一樣的時(shí)候返回1,相同的時(shí)候返回0
<< 按位左移 將整個(gè)字節(jié)向左移動(dòng),右邊(低位)補(bǔ)0
>> 按位右移 將整個(gè)字節(jié)向右移動(dòng)财异,正數(shù)左邊用零填充,負(fù)數(shù)的左邊用1填充
PHP 實(shí)現(xiàn)了有符號(hào)數(shù)唱遭,最高位為符號(hào)位(1表示負(fù)數(shù)戳寸,0表示正數(shù)),其余31位數(shù)值位拷泽。
2)按位與疫鹊、或、異或舉個(gè)例子
- 按位與
1 & 0 => 0
1 &1 => 1
0 &1 => 1
0 &0 => 0
6&5
十進(jìn)制 4
- 按位或
1 | 0 => 1
1 | 1 => 1
0 |1 => 1
0 &0 => 0
6|5
-
按位異或
相同為0 不同為1
1 ^ 0 => 1
1 ^1 => 0
0 ^1 => 1
0 ^0 => 0
6|5
image.png
3)移位運(yùn)算符
<< 向左移位司致,>> 向右移位
正數(shù)拆吆,向左移位,高位移出脂矫,低位補(bǔ)0
向右移位枣耀,低位移出,高位補(bǔ)0
負(fù)數(shù):向左移位庭再,高位移出捞奕,低位補(bǔ)0
向右移位,低位移出拄轻,高位補(bǔ)1
三颅围、計(jì)算機(jī)碼
在計(jì)算機(jī)底層,整數(shù)以二進(jìn)制存儲(chǔ)恨搓,占4個(gè)字節(jié)院促,32個(gè)二進(jìn)制位。
PHP 實(shí)現(xiàn)了有符號(hào)數(shù)斧抱,最高位為符號(hào)位(1表示負(fù)數(shù)常拓,0表示正數(shù)),其余31位數(shù)值位夺姑。
位運(yùn)算使用的是計(jì)算機(jī)補(bǔ)碼墩邀。
1)原碼
最高位位符號(hào)位, 0 正 1負(fù) 數(shù)值位31位
2)反碼
正數(shù)的反碼等于原碼
負(fù)數(shù)的反碼等于原碼的數(shù)值位按位取反
3)補(bǔ)碼
正數(shù)的補(bǔ)碼等于其反碼(等于其原碼)
負(fù)數(shù)的補(bǔ)碼等于反碼數(shù)值位+1
例子:-6 >> 2
①-6 補(bǔ)碼數(shù)值位 111,1111,1111,,1111,1111,,1111,1111,1010
②-6 >>2 補(bǔ)碼低位移出盏浙,高位補(bǔ)1
1111,1111,1111,,1111,1111,1111,111,1110
③-6 >>2 反碼 補(bǔ)碼-1
1111,1111,1111,,1111,1111,1111,111,1101
④-6 >>2 原碼 = 反碼的數(shù)值位眉睹,按位取反
0000,0000,0000,0000,0000,0000,000,0010
⑤原碼數(shù)值位轉(zhuǎn)成十進(jìn)制 2
⑥加上符號(hào)位 -2
-6 >> 2 => -2
-6<<2
①-6 補(bǔ)碼數(shù)值位 111,1111,1111,,1111,1111,,1111,1111,1010
②-6<<2 補(bǔ)碼 高位移出,低位補(bǔ)零废膘。
11111,1111 ,...,1111,101000
③-6<<2 反碼 =補(bǔ)碼-1 11111,1111 ,...,1111,100111
④-6<<2 原碼 反碼按位取反 00000,0000,...,0000,011000
轉(zhuǎn)成十進(jìn)制 16+8=24
加上符號(hào)位 -24
四竹海、流程控制
1.程序語(yǔ)言的三大流程控制
1)順序結(jié)構(gòu)
程序自上而下執(zhí)行
2)分支(選擇結(jié)構(gòu))
滿足指定條件,執(zhí)行指定代碼
if else
switch case 語(yǔ)句
3)循環(huán)結(jié)構(gòu)
滿足一定條件丐黄,循環(huán)執(zhí)行指定的代碼斋配。
for while do while
2.(了解)流程圖的基本符號(hào)
1)符號(hào)
開始,流程走向,流程艰争,選擇(判斷)坏瞄,結(jié)束
2)兩整數(shù)能否整除的流程圖
五、分支結(jié)構(gòu)
1.if語(yǔ)句
1)條件執(zhí)行 if else
if(條件判斷){
語(yǔ)句塊1
}else{
語(yǔ)句塊2
}
思考題:
①雞翁一值錢五甩卓,雞母一值錢三鸠匀,雞雛三值錢一。百錢買百雞逾柿,問雞翁缀棍、雞母、雞雛各幾何机错?
--張建丘《算經(jīng)》
//法一:
for ($i = 0; $i <= 20; $i++) {//不能超過20爬范,否則錢數(shù)會(huì)超過100
for ($j = 0; $j <= 33; $j++) {//不能超過33,否則錢數(shù)會(huì)超過100
for ($k = 0; $k <= 100; $k++) {
if ($i + $j + $k == 100 && $i * 5 + $j * 3 + $k/3 == 100) {
echo '雞翁:' . $i . '<br/>';
echo '雞公:' . $j . '<br/>';
echo '雞雛:' . $k . '<br/><br/>';
}
}
}
}
//法二:
$i=0;
while($i<=20){
$j=0;
while($j<=33){
$k=0;
while ($k <= 100) {
if ($i + $j + $k == 100 && $i * 5 + $j * 3 + $k/3 == 100) {
echo '雞翁:' . $i . '<br/>';
echo '雞公:' . $j . '<br/>';
echo '雞雛:' . $k . '<br/><br/>';
}
$k++;
}
$j++;
}
$i++;
}
②
2)if elseif else
if(條件1)
{
語(yǔ)句塊1
}elseif(條件2){
語(yǔ)句塊2
}...
else{
語(yǔ)句塊n
}
3)案例:判斷成績(jī)青瀑,給出成績(jī)的等級(jí)提示
$score = 99;
if($score >= 90){
echo "優(yōu)秀";
}elseif($score >= 80){
echo "良好";
}elseif($score >= 70){
echo "可以";
}elseif($score >= 60){
echo "及格";
}else{
echo "不及格";
}
2.switch語(yǔ)句
1)語(yǔ)法
switch(表達(dá)式){
case 值1:
語(yǔ)句塊1;
break;
case 值2:
語(yǔ)句塊2;
break;
........
default :
語(yǔ)句塊n;
break;
}
2)說明
使用switch里面的表達(dá)式,和case的表達(dá)式中的值進(jìn)行比較痢法。相等時(shí)執(zhí)行相應(yīng)的語(yǔ)句塊狱窘。直到最后〔聘椋可以添加break語(yǔ)句蘸炸,實(shí)現(xiàn)指執(zhí)行一個(gè)case的語(yǔ)句塊。
多個(gè)case 可以共用一個(gè)語(yǔ)句塊尖奔。
3)案例 成績(jī)等級(jí)提示
switch(floor($score/10)){
case 10:
case 9:
echo "優(yōu)秀";
break;
case 8:
echo "良好";
break;
case 7:
echo "可以";
break;
case 6:
echo "及格";
break;
default:
echo "不及格";
}
//break是結(jié)束整個(gè)循環(huán)體:
當(dāng)j=2時(shí)搭儒,程序?qū)?huì)跳出內(nèi)層for循環(huán),執(zhí)行If(i==5)break;語(yǔ)句
//continue是結(jié)束單次循環(huán):
當(dāng)j=2時(shí)提茁,程序?qū)?huì)跳出當(dāng)前循環(huán)淹禾,不會(huì)打印j=5,而是接著執(zhí)行循環(huán),執(zhí)行j=3的情況
for ($i=0; $i < 10; $i++) {
for ($j=0; $j < 4; $j++) {
if ($j==2) {
continue;
}
echo "<br>";
echo $i,$j;
}
}