当前位置: 首页 > 后端技术 > PHP

搞定PHP面试-运算符知识点

时间:2023-03-29 19:58:08 PHP

一、算术运算符1、概述示例名称结果$a+$b加法$a和$b求和。$a-$b减去$a和$b之间的差值。$a*$b乘以$a和$b的乘积。$a/$b除法$a除以$b的商。$a%$b取$a除以$b的余数。-$a否定$a的反义词。2.TIPS除法运算符总是返回一个浮点数。唯一的例外是当两个操作数都是整数(或转换为整数的字符串)并且可以整除时,它返回一个整数。模运算符的操作数在运算前被转换为整数(减去小数部分)。模运算符%的结果与被除数具有相同的符号(符号)。也就是说,$a%$b的结果与$a的符号相同。例如:echo(5%3)."\n";//打印2echo(5%-3)."\n";//打印2echo(-5%3)."\n";//打印-2echo(-5%-3)."\n";//prints-22.按位运算符1.概述示例名称结果$a&$bAnd(按位与)将把$a和$b中两个1的位都设置为1。$a|$bOr(按位或)将$a或$b中为1的位设置为1。$a^$bXor(按位异或)将$a和$b中为1的位设置为1,另一个为0到1。~$aNot(按位求反)将$a中的位设置为0到1,反之亦然。$a<<$bShiftleft将$a中的位向左移动$b次(每次移位意味着“乘以2”)。$a>>$bShiftright将$a中的位向右移动$b次(每次移位意味着“除以2”)。2.TIPS位移是PHP中的数学运算。在任一方向移出的位都被丢弃。左移时,右侧用零填充,符号位被移除意味着符号不被保留。右移时,左边填充符号位,即保留符号。使用按位运算符时要特别注意优先级。例如:$a&$b==true比较后进行按位与;($a&$b)==true在比较之前执行按位与。三、比较运算符1、概述示例名称结果$a==$b等于TRUE,如果$a在类型转换后等于$b。如果$a等于$b并且它们属于同一类型,则$a===$b为全等TRUE。如果$a在转换后不等于$b,则$a!=$b不等于TRUE。如果$a在转换后不等于$b,则$a<>$b不等于TRUE。如果$a不等于$b,或者它们的类型不同,则$a!==$b不等于TRUE。如果$a严格小于$b,则$a<$b小于TRUE。如果$a严格大于$b,则$a>$b大于TRUE。如果$a小于或等于$b,则$a<=$b小于或等于TRUE。如果$a大于或等于$b,则$a>=$b大于或等于TRUE。$a<=>$b飞船运算符(组合比较运算符)当$a小于、等于或大于$b时返回小于、等于或大于0的整数值。PHP7开始提供$a??$b??$cNULL合并运算符从左到右第一个存在且不为NULL的操作数。如果两者都未定义且不为NULL,则返回NULL。PHP7开始提供。2.TIPS如果比较一个数字和一个字符串,或者比较一个涉及数字内容的字符串,字符串会被转换为一个值,并根据该值进行比较。此规则也适用于switch语句。使用===或!==进行比较时,不会进行类型转换,因为此时比较的是类型和值。truevar_dump("1"=="01");//1==1->truevar_dump("10"=="1e1");//10==10->truevar_dump(100=="1e2");//100==100->trueswitch("a"){case0:echo"0";break;case"a"://永远不会到达a因为"a"已经匹配0echo"a";打破;}?>3。对于多个类型,比较运算符比较(按顺序)操作数1类型操作数根据下表2类型结果null或stringstring将NULL转换为""进行数值或词法比较bool或null任何其他类型转换为bool,FALSE$b不等于TRUE。$a!==$b不相同如果$a不完全等于$b则为TRUE。2.如果TIPS数组中的单元具有相同的键名和值,则比较时相等$a=array("apple","banana");$b=array(1=>"banana","0"=>"苹果");var_dump($a==$b);//bool(true)var_dump($a===$b);//bool(false)+运算符和array_merge()的区别在于,当数组下标为字符时,遇到相同的键名时,+运算符会丢弃后面的值;array_merge()将用后一个值覆盖前一个值。当数组下标为数值时,array_merge()保留所有值并重新索引数组。+运算符还会丢弃具有相同下标的后续值。$arr1=['颜色'=>'红色',10,20];$arr2=[0,1,'color'=>'green'];print_r($arr1+$arr2);print_r(array_merge($arr1,$arr2));输出:数组([颜色]=>红色[0]=>10[1]=>20)数组([颜色]=>绿色[0]=>10[1]=>20[2]=>0[3]=>1)7.运算符优先级1.概述组合方向运算符附加信息Noneclonenewcloneandnewleft[array()right**arithmeticoperatorright++--~(int)(float)(string)(array)(object)(bool)@typeandincrement/decrementnoneinstanceoftype对!左逻辑运算符*/%左算术运算符+-。左算术运算符和字符串运算<<>>按位运算符无<<=>>=比较运算符无==!====!==<><=>左比较运算符&左位运算符和引用^左位运算符|左边的位运算符&&左边的逻辑运算符||逻辑运算符左??比较运算符还剩?:ternaryright=+=-==*=/=.=%=&=|=^=<<=>>=左赋值运算符和左逻辑运算符xor左逻辑运算符或逻辑运算符2.TIPS如果运算符有同样的优先级,运算符的组合方向决定了如何操作。例如,“-”是左结合的,则1-2-3等价于(1-2)-3结果为-4。另一方面,“=”是右结合的,所以$a=$b=$c等价于$a=($b=$c)。未组合的相同优先级的运算符不能一起使用,例如1<2>1在PHP中是不合法的。但另一方面,表达式1<=1==1是合法的,因为==的优先级低于<=。括号的使用,即使它们不是必需的,通常通过括号对而不是运算符优先级和结合性清楚地指示操作顺序来增加代码的可读性。专注于内存:递增/递减>!>算术运算符>大小比较>(不)相等比较>参考>按位运算符(^)>按位运算符(|)>逻辑与>逻辑或>三元>赋值>and>xor>or3。对于实际例子,请写出下面程序的输出$a=0;$b=0;if($a=3>0||$b=3>0){$a++;$b++;回声$a。"\n";回显$b。"\n";}实例分析1、题目中包含三个运算符=>||,优先顺序为>>||>=2。$a=3>0||$b=3>0等同于$a=((3>0)||$b=(3>0))3.(3>0)为真,所以不会计算||下面的公式4.$a=true,所以程序可以改写为$a=0;$b=0;if($a=true){$a++;$b++;回声$a。"\n";回显$b。"\n";}5.因为“自增/自减运算符不影响布尔值”,所以在$a++之后,$a的值仍然为真,echotrue,会输出16。因为$b=0,所以之后$b++,$b的值为17,输出为11