黑马程序员技术交流社区

标题: 【济南中心】PHP课程同步笔记day10:PHP运算 [打印本页]

作者: 小鲁哥哥    时间: 2017-4-27 18:36
标题: 【济南中心】PHP课程同步笔记day10:PHP运算
本帖最后由 小鲁哥哥 于 2017-4-27 18:42 编辑

【济南中心】PHP课程同步笔记day10PHP运算
算术运算符:+、-、*、/、%、++、--
      如果算术运算符左右的操作数不是数值型,首先要转成数值型,然后再进行运算。
      $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
6
0
0
0
0
0
1
1
0
5
0
0
0
0
0
1
0
1
6 & 5
0
0
0
0
0
1
0
0

      将(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
6
0
0
0
0
0
1
1
0
5
0
0
0
0
0
1
0
1
6 | 5
0
0
0
0
0
1
1
1

      (111)2转成10进制:(111)2 = 1*2^2+1*2^1+1*2^0 = 4+2+1=7
4.按位异或(^)
      按位异或(^):两个整数的对应位进行按位异或运算。
      运算的原则:如果左右两个整数的二进制对应位,不同时结果为1,相同时为0
      举例:6^5 = 3
6
0
0
0
0
0
1
1
0
5
0
0
0
0
0
1
0
1
6 ^ 5
0
0
0
0
0
0
1
1

      (11)2转成10进制:(11)2=1*2^1+1*2^0= 2+1=3
5.左移运算(<<)
      按位或(<<):将左侧操作数向左移动多少位,移动的位数由右侧运算数来表示。、
      运算的原则:向左移出的部分将消失,如果不够8位,右边补0
      注意:如果一个字节的第1位是1的话,向左移位,该1不会消失,将产生第二个字节。
      举例:6<<2 =24
6
0
0
0
0
0
1
1
0
6 << 2
0
0
0
1
1
0
0
0

      (11000)2转成10进制:(11000)2=1*2^4+        1*2^3 = 16+8=24        
6.右移运算(>>)
      按位或(>>):将左侧操作数向右移动多少位,移动的位数由右侧运算数来表示。
      运算的原则:向右移出的部分将消失,如果不够8位,左边补0.
      举例:6>>2=1
6
0
0
0
0
0
1
1
0
6 >> 2
0
0
0
0
0
0
0
1
错误控制运算符(@)
      @可以用来屏蔽错误。@用于屏蔽的表达式必须要有一个确切的值
      @可以用在:变量名前、常量名前、函数调用前、某个运算表达式之前。
      @不能用在结构语句之前:if、while、dowhile、for、foreach等
      @不能用在函数定义之前,也不能用在类定义之前。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2