黑马程序员技术交流社区
标题: 【济南中心】PHP课程同步笔记day10:PHP运算 [打印本页]
作者: 小鲁哥哥 时间: 2017-4-27 18:36
标题: 【济南中心】PHP课程同步笔记day10:PHP运算
本帖最后由 小鲁哥哥 于 2017-4-27 18:42 编辑
【济南中心】PHP课程同步笔记day10:PHP运算
算术运算符:+、-、*、/、%、++、--
如果算术运算符左右的操作数不是数值型,首先要转成数值型,然后再进行运算。
$a = “10px”;
$b = “20px”;
$c = $a * $b;
Var_dump($c); //int(200)
除号:如果左右两个操作数都是整数,且能除尽,则结果为int;如果除不尽,则结果为float
$a = “10”;
$b = “3”;
$c = $a /$b;
Var_dump($c); //float(3.333333)
取余:两个数相除取除数。可以用来判断两个数是否能除尽。如果除数为0,则能除尽。要求左右两个操作数,必须是整数,如果不是整数,则去掉小数。运算结果的符合与被除数一致。如果被除数为正,则结果为正。如果被除数为负,则结果为负。结果符号与除数无关。
$a = 10;
$b = 2.93;
$c = $a % $b;
Var_dump($c); //int(0)
++ 加1运算符(自加1)。有两种用法:一是作前缀(++$n),二是作后缀($n++).
1)如果单独使用,则$n++和++$n的结果一样
$a = 10;
$a++; //展开后$a = $a+1;
Var_dump($a); //11
Echo “<hr />”;
$a = 10;
++$a; //展开后$a = $a+1
Var_dump($a); //11
2)如果混在其他表达式中,则$n++和++$n的结果 就不一样
$a = 10;
$b = $a++; //先赋值再加1
Var_dump($a,$b); //int(10),int(10)
Echo “<hr />”;
$a = 10;
$b = ++$a; //先加1再赋值
Var_dump($a,$b); //int(11),int(11)
$a = 10;
Echo $a++; //先输出变量$a,然后$a+1
Echo “<br />”;
Echo $a; //$a=11
$a = 10;
Echo $a = $a+++2;
Echo “<br />”
Echo $a;
字符串运算符:.和.=
“.”可以连接左右两个字符串或变量。
如果左右有一个整型,则会报错,如果想连接需要给整数加引号
如果是变量,则系统会自动给其加引号
以下TRUE和NULL当成常量来看待。TRUE常量的值为”1”,而NULL常量的值为””
$a = 200;
Var_dump(“100”.”abc”.$a.TRUE.NULL); //string'100abc2001'
“.=”先连接再赋值。
“.=”是上下连接,上行变量的值,与该行剩余的部分连接在一起。
$a =200;
$a .=300;
$a .=”school”;
Var_dump($a); //”200300school”
赋值运算符:=、+=、-=、*=、/=、%=
“=”赋值号。将右边的运算结果,赋给左边的变量。左边不能运算,左边只能是变量的名称。如$a = 10+20;
“+=”先加后等(执行算术的加法运算)。
要求左右两个操作数必须是数值的,如果不是数值要转成数值再运算。
$a +=20; //展开后$a = $a+20
$a = true;
$a +=”abc”; //$a = $a+”abc”
$a = true +”abc”
$a = 1+0 =int(1)
Var_dump($a); //int(1)
实例:表格隔行变色
//实例:表格隔行变色
[HTML] 纯文本查看 复制代码
$str = “”;
$str .=”<table width=’500’ border=’1’ align=’center’>”;
$str .=”<tr>”;
$str .= “<th>编号</th>”;
$str .= “<th>新闻标题</th>”;
$str .= “<th>发布时间</th>”;
$str .=“</tr>”;
$i = 1;
While($i<=100){
//如果是偶数行,则添加bgColor属性
If($i %2 ==0){
$str .= “<tr bgColor=’yellow’>”;
}else{
$str .=”<tr>”;
}
$str .=”<td> </td>”;
$str .=”<td> </td>”;
$str .=”<td> </td>”;
$str .=”</tr>”;
++$i;
}
$str .=”</table>”;
Echo $str;
比较运算符: >、>=、<、<=、==、!=、===、!==
比较运算符的运算结果,一定是一个布尔值。
“=”赋值号
“==”如果左右两个操作数的值一样,则结果为TRUE;否则为FALSE
“===” 既比较类型,还有判断值是否一样。如果类型和值都一样,则结果为TRUE,否则结果为FALSE。
1.字符串比较
i. “ab”>”ac”比较大小
如果两个字符串相比较,比的是每个字符的ASCII码。从左到右,一个一个来比较,如果某个位上的字符ASCII值大于另一个位上ASCII值,则直接确定结果。”b”的ASCII值为98,”c”ASCII值为99,所以”ab”<”ac”
ii. “ab” > “10”比较大小
这里的”10”也是字符串,同样也是要进行比较ASCII码的值。”a”=》97,”1”=>49,所以”ab”>”10”
iii. “河南省”>”河北省” 比较结果
如果两个字符都是汉字,则按拼音的先后顺序比较
iv. 10>”abc”比较
如果一个操作数是普通字符,另一个位整型,则需要将另一个转化为整型进行比较。”abc”=>0 所以10》”abc”
v. 20>true的比较
如果一个操作数是整型,另一个操作数是布尔值,因为布尔值优先级高,因此将整型转为布尔型再进行比较
vi. True >NULL的比较
如果一个操作数是NULL,另一个操作数是布尔型,因为布尔值优先级高,因此将NULL转为布尔值,为FALSE.TRUE>FALSE
vii. “120” > “100”
如果两个操作数都是数值字符串,先转成数值,再比较
2.字符串比较的一般规则
i. 如果一个操作数是布尔,则另一个操作数转成布尔,再比较(优先级最高)
ii. 如果一个操作数是整型,则另一个是字符串,则转成整型,再比较
iii. 如果两个操作数都是普通字符串,则按ASCII码进行比较。a>A>1
3.chr()和ord()
i. Chr()返回指定的字符。如:chr(97) = “a”
ii. Ord()返回指定的字符的ASCII码值(10进制)。如:ord(“a”) =97
逻辑运算符:&&、||、!
逻辑运算符的运算结果是一个布尔值。
逻辑运算符左右的操作数必须是布尔值,如果不是,要转成布尔值。如:100&&”abc”
“&&”逻辑与(并且关系)。左右两个操作数都为TRUE,则总结果为TRUE;如果一个为FALSE,则结果为FALSE
如果左边操作数为FALSE,则结果为FALSE.
如果左边操作数为TRUE,还要看右操作数是否为TRUE.
实例:判断一个人的年龄是否可以当兵(18=<x<=25)
[HTML] 纯文本查看 复制代码
1)获取地址栏中输入age参数的值
If(!empty($_GET[‘age’])){
$age = $_GET[‘age’];
//判断年龄是否合法
If($age>=18 && $age<=25){
Echo “你的年龄符合当兵”;
}else{
Echo “你的年龄超出了范围”;
}
}else{
Echo “非法输入”;
}
“||”逻辑或(二选一)
如果左右两个操作数,有一个为TRUE,则结果为TRUE .
如果左边操作数为TRUE,则右边操作数不再计算。
如果左边操作数为FALSE,则才会计算右边的操作数
实例:闰年判断
If(isset($_GET[‘year’])){
$year = $_GET[‘year’];
//闰年判断
If($year%4 ==0 && $year%100!=0||$year%400==0){
//如果是闰年,执行的代码
Echo “{$year}是闰年”;
}else{
//如果是平年,执行的代码
Echo “{$year}是平年”;
}
}else{
Echo “请在地址栏输入一个合法的年份”;
}
条件(三元)运算符
一元运算符:只有一个操作数。如:(int)$a、(string)$a、!$a、$a++等
二元运算符:左右有两个操作数。如:+、-、*、/、%、&&、||、=、+=、-=
三元运算符:就是有三个操作数。
语法格式:表达式1?表达式2:表达式3
语法格式:条件判断?结果1:结果2
实例:求两个整数的最大值
[HTML] 纯文本查看 复制代码
$a = 100;
$b = 20;
Function getA($num){
Return $num;
}
$max = $a>$b ?getA($a):$b;
Echo “最大值为:$max”;
位运算
1.位运算介绍
计算机底层的数据的运算,都要转成二进制,才能进行运算。
位运算就是指内存中二进制对应位进行运算。
位运算,一般都看成是一个字节(8位二进制)参与运算,不够8位前面补0
位运算要求左右运算数,必须是整数,才能进行位运算。
2.按位与(&)
按位与(&):两个整数的对应位进行按位与运算。
运算的原则:如果左右两个整数的二进制对应位,都是1的话,则结果为1,否则为0.
举例:6&5 =4
将(100)2转成10进制:(100)2=1*2^2+0*2^1+0*2^0 = 4+0+0 = 4
3.按位或(|)
按位或(|):两个整数的对应位进行按位或运算。
运算的原则:如果左右两个整数的二进制对应位,只要有一个是1,则结果为1,否则结果为0.
举例:6|5 =7
将(111)2转成10进制:(111)2 = 1*2^2+1*2^1+1*2^0 = 4+2+1=7
4.按位异或(^)
按位异或(^):两个整数的对应位进行按位异或运算。
运算的原则:如果左右两个整数的二进制对应位,不同时结果为1,相同时为0
举例:6^5 = 3
将(11)2转成10进制:(11)2=1*2^1+1*2^0= 2+1=3
5.左移运算(<<)
按位或(<<):将左侧操作数向左移动多少位,移动的位数由右侧运算数来表示。、
运算的原则:向左移出的部分将消失,如果不够8位,右边补0
注意:如果一个字节的第1位是1的话,向左移位,该1不会消失,将产生第二个字节。
举例:6<<2 =24
将(11000)2转成10进制:(11000)2=1*2^4+ 1*2^3 = 16+8=24
6.右移运算(>>)
按位或(>>):将左侧操作数向右移动多少位,移动的位数由右侧运算数来表示。
运算的原则:向右移出的部分将消失,如果不够8位,左边补0.
举例:6>>2=1
错误控制运算符(@)
@可以用来屏蔽错误。@用于屏蔽的表达式必须要有一个确切的值
@可以用在:变量名前、常量名前、函数调用前、某个运算表达式之前。
@不能用在结构语句之前:if、while、dowhile、for、foreach等
@不能用在函数定义之前,也不能用在类定义之前。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |