运算符

算术运算符

基础:

符号有:+   -   *   /   %

说明:

  1. 他们都是针对数字进行的运算;
  2. 如果他们的两边有不是数字的数据,就会(自动)转换为数字;
  3. 其中取余运算(取模运算)%,它只针对“整数”进行运算,如果不是,会自动截取为整数。
      1. 3 % 3 相当于 11 % 3;
    • 11.8 % 3. 8 相当于 11 % 3;

自增自减运算符:

  • 常规:对数字进行自加1或自减1。
  • 字符串: 只能自增,且自增的效果就是“下一个字符”,其只能针对字母或数字进行自加:
  • 布尔值递增递减无效
  • null递减无效,递增结果为1

字符串自增的例子:

前自增和后自增的区别(自减类似)

通常,我们在循环中,推荐使用前加加(效率稍高),比如:

for($i = 1; $i < 10000; ++$i){ ....... }

演示前加加后加加进行1千万次的“效率比较”:

比较运算符

  • 符号:>   >=   <   <=   ==   !=   =   !
  • 一般比较:是针对数字进行的大小比较
  • 和=比较:前者通常叫做模糊相等的比较,后者叫做精确相等的比较(只有数据的类型和数据的值/内容,都相等,才是全等的)。
  • 不要对浮点数直接进行大小比较

必须能够找到手册的“类型比较表”:附录》php类型比较表:

常见不同类型(标量类型)数据之间的比较规律:

  • 如果比较的数据中,有布尔值,转为布尔值比较,布尔值比较只有一个规则:true>false
  • 否则,如果有数字值,就转为数字值比较:这就是常规比较。
  • 否则,如果两边都是“纯数字字符串”,转为数字比较
  • 否则,就按字符串比较。字符串比较的规则是:
    • 对两边的字符串,一个一个从前往后取出字符并进行比较,谁“先大”,结果就是它大。
“abc” > true  //? false
“abc” > false //true
“0” > false //false
3 > “12”; //false
3 > “12abc”; //false
“3” > “12” //false
“abc” > “c”; //false,后者大
“abc” > “ab123cde”; //true 因为这里”c”大于”1”
“3abc” > “12abc”; //true, 因为”3”大于“1”
1 > “a”; //? true
“1” > “a” //? false

逻辑运算符

  • 逻辑运算符都是针对“布尔值”进行的运算。
  • 如果不是布尔值,就会转换为布尔值进行;
  • 布尔值只有2个:true,false

基本运算规则(真值表):

  • 逻辑与规则:

    • true && true ==>> true
    • true && false ==>>false
    • false && true ==>>false
    • false && false ==>>false
    • 总结:只有2个都是true,结果才是true

      只要有一个是false,结果就是false
  • 逻辑或规则:

    • true || true ==>> true
    • true || false ==>>true
    • false || true ==>>true
    • false || false ==>>false
    • 总结:只有2个都是false,结果才是false

      只要有一个是true,结果就是true
  • 逻辑非规则:

    • !true ==>> false
    • !false ==>> true

辑运算符的“短路现象”:

  • 逻辑与短路:

结果:如果一个语句中,通过与运算需要进行多项判断,而且不同的判断具有明显不同的“复杂程度”,则我们应该将简单的判断放在前面,这时候我们就可以利用短路现象以达到提高效率的目的。

  • 逻辑或短路:

结果:如果一个语句中,通过或运算需要进行多项判断,而且不同的判断具有明显不同的“复杂程度”,则我们应该将简单的判断放在前面,这时候我们就可以利用短路现象以达到提高效率的目的。

字符串运算符

  1. 符号只有一个: .  也衍生出另一个: .=
  2. 含义:就是将这个符号两边的字符串连接起来;
  3. 如果两边不是字符串,就会自动转换为字符串,然后连接起来。
“ab”  .   3                  ==>> “ab3”;
“12” . 3 ==>>”123”
12 . 3 ==>> “123”

赋值运算符:

  • 一个基本赋值运算符: =

    • 形式: $变量名 = 值;
    • 理解: 将右边的值(不管做了多少运算),赋值给左边的变量。
  • 若干个衍生的赋值运算符:
    • += 加等: 形式: $变量名 += 值;

      • 理解: 相当于: $变量名 = $变量名 + 值;
    • -= 加等: 形式: $变量名 -= 值;
      • 理解: 相当于: $变量名 = $变量名 - 值;
    • *=  /=  %=  .=  其都可以认为是上述形式的一种简化版。

条件(三目,三元)运算符

  • 只有一个,形式如下:

    • 数据值1 ? 数据值2 : 数据值3
  • 含义:

    • 对数据值1进行判断,如果为“真”,则该运算符的运算结果就是数据值2,否则就是数据值3;
  • 它是这样一个流程控制(逻辑判断)语句的简写形式:

if( 数据值1 ){
$变量名 = 数据值2;

else{
$变量名 = 数据值3;

注意:如果数据值1不是布尔值,也会转换为布尔值;

$score = 66;                    //分数
$valuation = $score >= 60 ? “及格” : “不及格”; //结果为“及格” $score = 56; //分数
$valuation = $score >= 60 ? “及格” : “不及格”; //结果为“不及格” $score = 56; //分数
$valuation = $score ? “及格” : “不及格”; //结果为“及格”,这里可能就偏离的本意!!

位运算符

基础规定

  1. 位是什么?就是2进制数字的每一个“位”,一个整数数字,有(由)32个位构成!
  2. 位运算符是仅仅针对整数进行的运算符;
  3. 位运算符有如下几个
    • &: 按位与;
    • |: 按位或;
    • ~: 按位非;按位取反;
    • ^: 按位异或;
  4. 位运算符的基本语法规则:
  • 按位与基本规则:

    • 1 & 1 ==>> 1
    • 1 & 0 ==>> 0
    • 0 & 1 ==>> 0
    • 0 & 0 ==>> 0
  • 按位或基本规则:

    • 1 | 1 ==>> 1
    • 1 | 0 ==>> 1
    • 0 | 1 ==>> 1
    • 0 | 0 ==>> 0
  • 按位非基本规则:

    • ~1 ==>> 0
    • ~0 ==>> 1
  • 按位异或基本规则:

    • 1 ^ 1 ==>> 0
    • 1 ^ 0 ==>> 1
    • 0 ^ 1 ==>> 1
    • 0 ^ 0 ==>> 0
      • 可见,按位异或的规则是:相同为0,不同为1

整数的按位与运算(&)

  • 形式:

    • $n1 & $n2; //n1,n2是2个任意整数;
  • 含义:
    • 将该2个整数的二进制数字形式(注意,都是32位)的每一个对应位上的数字进行基本按位与运算之后的结果!
  • 注意:他们运算的结果,其实仍然是一个普通的数字(10进制)。

示例图示(只用8个位来演示):

$r1 = 10 & 20;

10的2进制

0

0

0

0

1

0

1

0

20的2进制

0

0

0

1

0

1

0

0

&运算结果:

0

0

0

0

0

0

0

0

代码验证:

整数的按位或运算:

  • 形式:

    • $n1 | $n2; //n1,n2是2个任意整数;
  • 含义:
    • 将该2个整数的二进制数字形式(注意,都是32位)的每一个对应位上的数字进行基本按位或运算之后的结果!
  • 注意:他们运算的结果,其实仍然是一个普通的数字(10进制)。

示例图示(只用8个位来演示):

$r1 = 10 | 20;

10的2进制

0

0

0

0

1

0

1

0

20的2进制

0

0

0

1

0

1

0

0

|运算结果:

0

0

0

1

1

1

1

0

则结果该数据值大小为: 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 = 16 + 8 + 4 + 2 = 30

代码验证:

整数的按位左移运算

  • 形式:

    • $n1 << $m
  • 含义:
    • 将十进制数字n1的二进制数字形式(也是32位的)的每一个位上的数字都一次性往左边移动m位,

      并将右边空出来的位置补0,左边冒出去的不管,这样操作之后得到的结果。

示例图示(只用8个位来演示):

$r1 = 10 << 2;

10的2进制

0

0

0

0

1

0

1

0

左移2位后

0

0

1

0

1

0

0

0

则结果为:

25

0

23

0

0

0

可见,结果为:25 + 23 = 32 + 8 = 40

代码验证:

补充知识:原码,反码,补码

  • 原码:

    • 就是一个二进制数字,从“数学观念”上来表达出的形式。其中,我们规定:
    • 一个数字的最左边一位是“符号位”,0表示正数,1表示负数;

    比如:

  • 反码:

    • 正数的反码就是其本身(即不变);
    • 负数的反码是:符号位不变,其他位取反;

    比如:

  • 补码:

    • 正数的补码就是其本身(即不变);
    • 负数的补码是:符号位不变,其他位取反后+1——即反码+1

    比如:

一个小提示:计算机内部的运算,实际全都是使用补码进行的,而且运算的时候,符号位不再区分,直接也当做“数据”参与运算:

  • 示例1: 5+3<

  • 示例2: 5-3:

    • 实际上,cpu内部,会将“减法”运算,转换为“加法运算”,即:5 + (-3)

位运算符的应用:管理一组事物的开关状态

  • 什么是开关状态?

    • 现实中,有很多数据都是只有2种结果(值)的,对应的其实就是我们的布尔类型的值。
    • 这里,所谓管理一组事物的开关状态,应该理解为其实就是管理若干个只有2个状态的“数据符号”。
    • 比如:有5个灯泡,对应5个状态数据。
    • 这5个灯泡,就有 25 种状态呢?
  • 这里的管理目标是:使用一个变量,就可以表达若干个数据的“当前状态”。具体有3个任务:

    1. 通过该变量,可以获知任何一个数据(灯泡)的当前状态。
    2. 通过该变量,可以将一个一个数据的状态“关闭”;
    3. 通过该变量,可以将一个一个数据的状态“开启”;

数组运算符

有这些:

  • +: 数组联合,也可以理解为“数组串联”。

将右边的数组项合并到左边数组的后面,得到一个新数组。如有重复键,则结果以左边的为准

$arr1 = array(5=>10,  8=>20,  10=>30);
$arr2 = array(3=>33, 2=>22);
$r1 = $arr1 + $arr2; //结果为:array(5=>10, 8=>20, 10=>30, 3=>33, 2=>22)
另一个有重复键的例子:
$arr1 = array(5=>10, 8=>20, 10=>30);
$arr2 = array(8=>33, 2=>22);
$r1 = $arr1 + $arr2; //结果为:array(5=>10, 8=>20, 10=>30, 2=>22)
  • ==

如果两个数组具有相同的键名和键值(可以顺序不同,或类型不同),则返回true

$arr1 = array(3=>33,  2=>22);
$arr2 = array(2=>”22”, 3=>”33” );
此时,$arr1,和 $arr2是相等的( = = )
  • !=
  • ===: 如果两个数组具有相同的键名和键值且顺序和类型都一样,则返回true
  • != =

错误控制运算符@:

通常就用在一个地方:

$link  =  @mysql_connect(“数据库服务器地址”, “用户名”,  “密码”);

作用是:

如果该连接数据的语句失败(比如连接不上),则屏蔽该失败的错误提示!

运算符的优先级

运算符,都有优先级问题!

记住以下几条就可以了:

  • 要意识到运算符有优先级问题
  • 括号最优先,赋值最落后(通常)
  • 先乘除后加减
  • 大致:单目运算符〉算术运算符〉比较运算符〉逻辑运算符(除了“非”运算)

能查到手册: 语言参考》运算符》运算符的优先级。

流程控制

流程图基本符号:

只是人们习惯上使用的一些图形符号,以代表一定的含义,帮组别人理解流程过程。

流程走向:

开始结束:

语句(块):

判断:

输入输出:

if分支结构

基本语法形式如下:

if (条件判断1){
分支1;
}
else if (条件判断2){
分支2;
}
else if (条件判断3){
分支3;
}
......
else {
//else分支
}

switch分支结构

形式:

switch ( 表达式 ){
case 条件值1:
分支1;
【break;】 //是可以省略部分,不是语法所必须;
case 条件值2:
分支2;
【break;】 //是可以省略部分,不是语法所必须;
........
default :
default 分支;
}

举例如下:

for循环结构



php : 基础(3)的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  10. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

随机推荐

  1. Memcached,你懂的

    一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网 ...

  2. XML的一些事

    XML文件的优缺点: 使用XML作为传输格式的优势: 1. 格式统一, 符合标准 2. 容易与其他系统进行远程交互, 数据共享比较方便 3.调用将 XML 用作传输的现有服务. 4.使用 XSLT 可 ...

  3. Fiddler的一些坑: !SecureClientPipeDirect failed: System.IO.IOException

    手机的请求Fiddler可以捕捉,但是手机一直无法上网,在logs中看到的日志如下: !SecureClientPipeDirect failed: System.IO.IOException 由于远 ...

  4. My family No.1

    Ok, in my family, there are seven people including my father, mother, three sisters, one brother and ...

  5. NIO SelectionKey中定义的4种事件

    SelectionKey.OP_ACCEPT —— 接收连接继续事件,表示服务器监听到了客户连接,服务器可以接收这个连接了 SelectionKey.OP_CONNECT —— 连接就绪事件,表示客户 ...

  6. Caffe + Ubuntu 14.04 64bit + 无CUDA(linux下安装caffe(无cuda)以及python接口)

    安装Caffe指导书 环境: Linux 64位 显卡为Intel + AMD,非英伟达显卡 无GPU 一. 安装准备工作 1. 以管理员身份登录 在左上角点击图标,搜索terminal(即终端),以 ...

  7. Ideas about the future of management

    1. Business markets a. greater competition among companies b. increase in power of global companies ...

  8. Android爬坑之路

    做了那么久前端,现在终于可以回到我的老本行, 今天我用了一天的时间配置里Android开发环境,mac和windows双平台,eclipse和IDEA双平台,别问为什么,我就喜欢,中间大坑不断,再加上 ...

  9. 零成本实现Web性能测试:基于Apache JMeter

    http://book.51cto.com/art/201204/327301.htm

  10. python 学习(二)--关于类

    1.没有权限控制,在类方法或变量前加 "__" 两下划线,则变为"私有"变量(实际通过_<类名>__<变量或方法名> 可以访问) 2.类 ...