Web开发的介绍
Web开发分为
1、 静态web开发(html页面);
如果我们的一个页面,始终是一成不变的,则就是属于静态web开发,一般用html技术就可以做到;
静态web资源开发技术:html;
2、比如:我们需要发帖、网上支付、发短信、发邮件……这就需要动态网页技术了;
Web即表示网页的意思,它用于表示internet主机上供外界访问的资源,即供浏览器访问的资源,这种资源分为:
静态web资源:(如html页面)是指web页面中供人们浏览的数据始终是不变;
动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间访问web页面看到的内容是不相同
的;
常用的动态web资源开发技术php、jsp/servlet、ASP、asp.net等cgi通用网关技术;
Web站点:也叫web资源,项目。是在web服务器htdocs目录下的一个文件夹,一个web站点包含的资源可以有:php,css,html,jsp,图片,视频……
用UML流程图来解释php文件的执行过程
书写和调试简单的php代码
Php的基本语法介绍
① Php可以与html代码混合
也可以在php中嵌入html代码
//
//
//Echo”hello,world”
//
hello//?>
//
② 还可以使用下列方法嵌入php代码(脚本)【这种方法不推荐】
//
//
//Echo”
测试一下吧!”
//
hello//?>
//
//
③ 如果只是为了显示一个变量的值,也可这样写:
//=变量?>
④ /注释:
//C风格单行注释
*Unix风格单行注释
Php的变量和基本语法
1、变量/常量
2、Php数据类型和基本语法
基本语法
1、 html和php混编
2、 一个语句以;(分号)结束
3、 如何定义一个变量、和变量的使用
4、 变量的数据类型不是固定不变的
5、 Php是弱数据类型的编程语言
6、 Php区分大小写
7、 一个有效的变量名由字母或下划线开头,后面跟任意数量的字母,数字或下划线(不要使用数字开头,也不要特殊字符开头)
Php的数据类型有三大类:
1、Php基本数据类型
① 整型 integar
可以表示一个整数 比如:$ts=1;$ts=-12
② 浮点型(小数型:包含单双精度float/double)
可以表示一个小数 比如:$ts=1.12;$ts=3.1415926
③ 布尔类型(表示真和假 NULL和FAULE)
表示真或假 比如:$ts=true;$ts=false
④ 字符串型
表示一个字符串 比如:$ts=“我是一个好人,hello”
2、复合数据类型
① 数组(array)
② 对象(object)
3、特殊数据类型
① null(空型)
② 资源类型(resource)
定义一个变量和给变量赋值
/
$a=90;//这里相当于我们定义了一个变量a并赋值90,如果重新赋值后会把前面的值和类型替换,等于是冲掉了前面的值,或者说是重新定义了一个变量
/?>
☞ 思考一个问题,会输出什么结果
(注意notice和fatal warming的区别,前者在内存中跳过不执行,执行下面的,而后者是致命错误,程序直接跳出,完全不再执行)
//
//
//$a;/若/只定义变量而不赋值,则内存中不会给它分配内存
//Echo $a;
//Echo “HELLO“;
//?>
(html界面显示:Notice:undefined
var……)后面的hello还是可以输出的
整型数据的细节:
① 值可以是十进制,十六进制(ox打头)或八进制表示;
比如:$a=0123;//八进制数(以0开头)
进制的换算成十进制:
0123=3*8的零次方+2*8的一次方+1*8的二次方+0*8的三次方=83
其他类推……
$a=0x1A;//十六进制数0~9,A,B,C,D,E,F共16个数字来表示
0x1A=A*16的0次方+1*16的一次方+x*16的二次方+0*16的三次方=26
② Php不支持无符号整数即php中的整数都是有符号的;
③ 整型数的字长和平台有关,通常是(4个字节有符号数)。Integer值的字长可以用常量php_int_size来表示,最大值可以用常量php_int_max来表示;
④ 如果给定的一个数超出了integer的范围,将会被解释为float;(一个整数一般占用四个字节(和平台有关)一个字节占8bite;0为整数,1为负数;
正的int型最大为2的31次方减一即2147183647,负的int型最大也是2147183647,超过这个数值则数据类型变成浮点型数)
布尔类型的细节:true和false
$a=true;$a=false;
以下值都会被当做false对待:
布尔值false本身;
整型值0(零);
浮点型值0.0(零);
空字符串,以及字符串“0“;
不报括任何元素的数组;
不包括任何成员变量的对象(仅php4.0适用);
特殊类型NULL(包括尚未设定的变量);
从没有任何标记(tags)的XML文档生成的SimpleXML
所有的其它值都被认为是true(包括任何资源)
浮点型细节
① 浮点数也叫双精度数或实数;
② 浮点数的字长和平台有关,通常最大值是1.8e308,并具有14位十进制数字的精度(这个限制很重要);浮点数的精度最大是14位,从左边开始第一个非0的书就是精度开始
若$a=0.234567890222229888,则输出的是0.
0.23456789022223,14位后面的四舍五入,若$a=0.000000023456789022则输出2.3456789022+e8
456.123456789238输出456.12345678924;
字符串的细节
①
一个字符串是由一系列的字符组成,一个字符就是占用一个字节$a=“hello“,则$a占用了5个字节
② 一个字符串可以表示多大的字符串?php对字符串的长度的限制只和运行php程序的该台计算机的内存大小有关,即php的字符串可以足够大,理论是我们对字符串的大小没有限制,只要不超过内存即可;
1)我们定义字符串的时候可以用单引号‘’也可以使用双引号““,区别:
例子:
$a=90;
$user1=”hello$a”;(双引号)
$user2=’hello$a’;(单引号)
Echo ’user1=’user1;
Echo ’user2=’user2;
则输出的是user1=hello90 user2=hello$a
从上面的案例我们看出,当一个变量包含在““中时,认为输出的是它的值,‘’单引号则认为输出的是$a这个符号本身;
2)$v1=”hello\””;(双引号)
$v2=’hello\”’;(单引号)
Echo ’v1’;
Echo ’v2’
输出的是hello hello\”
小结:若字符串是包围在单引号中,除了来处理\”时会输出\”外,其他规则都一样。
Php数据类型的自动转换
变量的类型不由程序员设定的,确切的说,是由php根据该变量使用的上下文在运行时决定的,可以通过var_dump($变量1,$变量2……)的方式来显示其类型。
表达式
几乎所写的任何东西都是一个表达式,简单却最精确的定义一个表达式的方式就是“任何有值的东西“。
算术运算符
Php中常用的有:+、-、*、/、%(取模,得到余数)
左+ - * /
% a+=3等价于a=a+3 其他依次类推
比较运算符
$a==$b 等于 true 如果$a等于$b
$a===$b 全等 true 如果$a等于$b,并且他们的类型也相同
$a!=$b 不等 true 如果$a不等于$b
$a<>$b 不等 true 如果$a不等于$b
$a!&#61;&#61;$b 非全等 true 如果$a等于$b&#xff0c;或他们的类型也不相同
$a
$a>$b 大于 true 如果$a严格大于$b
$a<&#61;$b 小于等于 true 如果$a小于或等于$b
$a>&#61;$b 大于等于 true 如果$a大于或等于$b
逻辑运算符
$a
&&$b and 逻辑与 如果$a与$b都为true&#xff0c;则结果为true
$a
||$b or 逻辑或 如果$a与$b任意一个为true&#xff0c;则结果为true
&#xff01;$a not 逻辑非 如果$a不为true&#xff0c;则结果为true
三元运算符
基本语法&#xff1a;
表达式1&#xff1f;表达式2&#xff1a;表达式3
规则&#xff1a;如果表达式1的运算结果是true&#xff0c;则取表达式2的值&#xff0c;否则取表达式3的值&#xff0c;表达式2,3可以是具体的值或计算式或函数。
字符串运算符
有2个字符串运算符&#xff0c;使用连接运算符(“.”)&#xff0c;一个小点。
//
// $a&#61;hello;
// $b&#61;world;
// $c&#61;$a.$b;
//Echo $c;
//?>
则输出&#xff1a;hello world
“.”两边不管是否是字符串&#xff0c;只要出现“.”&#xff0c;都将以字符串的类型来处理&#xff0c;即将他们的内容进行拼接。
类型运算符
基本语法&#xff1a;instanceof用于确定一个php变量是否属于某一类class的实例&#xff0c;在实际开发中&#xff0c;我们可能需要去判断某个变量是否是某个类型&#xff0c;通常在面向对象开发中可能用到。【后面细讲】
运算符的优先等级
从低到高排列
Php的语法结构----三大流程控制
顺序控制&#xff1a;就是不加控制的流程&#xff0c;默认情况&#xff0c;会按照顺序来执行你编写的代码&#xff0c;让程序可以顺序的执行。
分支控制&#xff1a;
让程序有选择的执行代码。分支控制有三种&#xff1a;单支&#xff0c;双支&#xff0c;多支&#xff1b;
If语句
1 单支控制&#xff1a;
语法&#xff1a;if(条件表达式){
语句1&#xff1b;
语句2
。。。。。。
}
在这里的条件表达式不管多复杂&#xff0c;最终运算的结果就是true或false
2 双分支
基本语法&#xff1a;
If(条件表达式){
语句1&#xff1b;
语句2&#xff1b;
……
}else{
语句1
语句2&#xff1b;
。。。。。。
}
3 多分支
语法&#xff1a;
If(条件表达式){
多个语句
}else if(条件表达式){
多个语句
}else if(条件表达式){
多个语句
}。。。。。。else{
语句
}
对上面的语法的注意&#xff1a;
①
这里的else可以有一个&#xff0c;也可以有多个&#xff1b;
②Else可以有&#xff0c;也可以没有。
Switch分支语句&#xff1a;
基本语法&#xff1a;
Switch(表达式){
Case 常量1&#xff1a;
多个语句&#xff1b;
Break&#xff1b;
Case 常量2&#xff1a;
多个语句&#xff1b;
Break&#xff1b;
。。。。。。
Default&#xff1a;
多个语句&#xff1b;
Break&#xff1b;(可以没有)
}
对上面的语法注意&#xff1a;
① case语句有一到多&#xff1b;
② default语句可以没有(根据自己代码的业务逻辑)&#xff1b;
③ 通常&#xff0c;在case语句后&#xff0c;要带break&#xff0c;表示退出switch语句&#xff1b;
④ 常量的类型可以是整型(int)&#xff0c;浮点型(float)&#xff0c;布尔值等【当数据类型不同时&#xff0c;电脑会自行进行数据类型的转换】
⑤ 如果匹配到一个入口case&#xff0c;则就会一直执行&#xff0c;不再判断是否匹配&#xff0c;直接输出echo后面的数据&#xff0c;直到遇到break&#xff0c;跳出switch
⑥ default语句本身放置的位置对执行的结果没有影响&#xff0c;首先还是按照case顺序对各个case进行匹配&#xff0c;若一个都没匹配到&#xff0c;则执行default&#xff0c;直到遇到break语句&#xff0c;则退出switch&#xff1b;
if语句和switch语句的区别与应用场景&#xff1a;
从学习过程来看&#xff0c;if是对某个范围的判断&#xff0c;而switch是对一个点的判断&#xff0c;所以我们可以这样去选择他们的应用场景&#xff1a;当我们的分支就是几个点的时候&#xff0c;比如判断坦克的方向&#xff0c;就应当考虑使用switch语句&#xff1b;如果你的分支是几个区域或范围的判断&#xff0c;则考虑使用if语句。
循环控制(让代码循环的执行)
① for循环
语法&#xff1a;
For(循环初值&#xff1b;循环的条件&#xff1b;步长){
多个语句&#xff1b;
}
例子&#xff1a;
For(i&#61;0【1】;i<10【2】;i&#43;&#43;【3】){
Echo”
你好&#xff0c;北京&#xff01;”【4】
}
Echo”over”【5】
② while循环
语法&#xff1a;
While(循环条件){
循环体语句&#xff1b;
}
例子&#xff1a;
$i&#61;0&#xff1b;【1】
While(i<10)【2】{
Echo”
你好&#xff0c;北京&#xff01;”【3】
$i&#43;&#43;&#xff1b;【4】
}
③ do while循环控制
语法&#xff1a;
do{
循环体
}while(循环条件
例子&#xff1a;
$i&#61;0;【1】
do{
echo”
你好&#xff0c;北京”【2】
$i&#43;&#43;;【3】(这里由程序员自己控制循环步长)
}while(i<10)【4】
练习
1 打印一半金字塔--à全金字塔---à空心的金字塔-----à空心菱形
在Javascript中的代码&#xff1a;(打印空心金字塔)
//
//var m&#61;10;
for(i&#61;1;i<&#61;m;i&#43;&#43;){
for(x&#61;1;x<&#61;m-i;x&#43;&#43;){
document.write(&#39; &#39;)
}
for(j&#61;1;j<&#61;(i-1)*2&#43;1;j&#43;&#43;){
if(i&#61;&#61;1||i&#61;&#61;m){
document.write("*")
}else if(j&#61;&#61;1||j&#61;&#61;(i-1)*2&#43;1){
document.write("*")
}else{
document.write(&#39; &#39;)
}
}
document.write(&#39;
&#39;)
}
//
2 做一个计算器
循环控制
循环相关的语句---break语句
Break结束当前的for while do-while switch结构的执行
Break可以接受一个可选的数字参数来决定跳出几重循环
例子&#xff1a;
//For(i&#61;0;i<&#61;5;i&#43;&#43;){
Echo$i&#xff1b;
If($i&#61;&#61;3){
Break;
}
}
Echo”hello”
则打印出来&#xff1a;012hello
例子2
$i&#61;0;
While(&#43;&#43;i){
Switch($i){
Case 5:
Echo”quit at 5
”
Break ;//跳出到switch外
Case 10:
Echo”quit at 10
”
Break 2;//跳出到2层循环到while外边
Default:
Break;//跳出到switch外
}
}
Echo’$i&#61;’.$i;
输出的结果是&#xff1a;quit at 5
Quit
at 10
$i&#61;10
从上面的案例我们得到&#xff1a;
① break语句默认跳出1层循环即(break 1)&#xff1b;
② break后面带的数字不能超过实际可以跳出的循环层数&#xff0c;否则会报错&#xff1a;fatal
erro
----continue语句
Continue用来跳出本次循环中剩余的代码并在条件值为真时重新开始执行下一次循环
Continue可以接受一个可选的数字参数来决定跳过几重循环
案例1&#xff1a;
For($i&#61;0;$i<4;$i&#43;&#43;){
If($i&#61;&#61;2){
Continue;
}
Echo”’$i&#61;’.$i.
”
}
Echo”hello”.$i;
输出结果为&#xff1a;
$i&#61;0
$i&#61;1
$i&#61;3
Hello4
案例2
For($i&#61;0;$i<2;$i&#43;&#43;){
for($j&#61;1;$j<4;$j&#43;&#43;){
if($j&#61;&#61;2){
continue;
}
Echo’$i&#61;’ .$i.’$j&#61;’.$i.”
’
}
}
$i&#61;0$j&#61;1
$i&#61;0$j&#61;3
$i&#61;1$j&#61;1
$i&#61;1$j&#61;3
案例3&#xff1a;
For($i&#61;0;$i<2;$i&#43;&#43;){
for($j&#61;1;$j<4;$j&#43;&#43;){
if($j&#61;&#61;2){
continue 2&#xff1b;//跳出2层循环到第一个for
}
Echo Echo’$i&#61;’
.$i.’$j&#61;’.$i.”
’
}
}
输出结果是&#xff1a;
$i&#61;0$j&#61;1
$i&#61;1$j&#61;1
-----Goto语句(仅在php5.3及以上版本中有效)
使用注意事项&#xff1a;php中的goto有一定的限制&#xff0c;只能在同一个文件和作用域中跳转&#xff0c;也就是说你无法跳出一个函数或类方法&#xff0c;也无法跳出到另一个函数&#xff0c;常见的用法是跳出循环或switch&#xff0c;(或指定的位置&#xff0c;)可以代替多层的break。
用法&#xff1a;
Goto 标签&#xff1b;
标签&#xff1a;
语句&#xff1b;
案例1&#xff1a;
Goto a&#xff1b;
Echo’aa’;//跳过这句话
A:
Echo’bb’;
输出结果&#xff1a;bb
案例2&#xff1a;
For($i&#61;0,$j&#61;50;$i<100;$i&#43;&#43;){
While($j--){
If($j&#61;&#61;17) goto end;
}
}
Echo”i&#61;$i”;
End:
Echo”j&#61;17”;
输出结果为&#xff1a;j&#61;17
常量(constant)
常量可以理解成一种特殊的变量&#xff0c;一旦被定义&#xff0c;就不能再改变或取消定义
常量和变量的不同&#xff1a;
① 常量前没有美元符号$&#xff1b;
② 常量用define()函数定义或const&#xff0c;而不能通过赋值语句&#xff1b;定义时要给初值&#xff1b;
③ 常量可以不用理会变量的作用域而在任何地方定义和访问&#xff1b;
④ 常量一旦定义就不能被重新定义或取消定义&#xff1b;
⑤ 常量的值是标量【基本数据类型】(string integer float boolean)
⑥ 常量的名称&#xff0c;我们一般是全部大写&#xff0c;然后用下划线隔开&#xff1b;
⑦ 什么时候需要使用常量&#xff1a;在程序中我们不希望某个值变化&#xff0c;则考虑使用常量&#xff0c;例如&#xff1a;圆周率、税率等&#xff1b;
第一种方法&#xff1a;
Define(”TAX_RATE”,0.08)
Echo TAX_RATE;
输出&#xff1a;0.08
第二种方法&#xff1a;(php5.3中支持)
Const TAX_RATE2&#61;2.0;
Echo TAX_RATE2;
输出&#xff1a;2.0
函数
学习目标
① 充分理解函数的概念&#xff1b;
② 能熟练的定义函数&#xff1b;
③ 掌握php中常用的系统函数。
函数的定义&#xff1a;
为完成某一功能的程序指令(语句)的集合&#xff0c;称为函数。有的程序员也称之为方法。
在php中&#xff0c;有系统函数和自定义函数
函数细节及运行原理&#xff1a;
函数的基本语法结构&#xff1a;
//参数列表是用来接收数据的
Function 函数名(参数列表){
函数体&#xff1b;//完成某一功能的指令集合&#xff0c;这个必须有
Return语句&#xff1b;//主要是返回一个结果&#xff0c;可以没有
}
Php中页面相互调用
为了完成a.php中可以使用到function01.php中定义的函数&#xff0c;我们需要补充讲解php中页面之间的相互调用
① require()和require_once()&#xff1b;
② include()和include_once()。
如a.php页面要使用b.php中定义的函数&#xff0c;可以使用如下指令&#xff1a;require require_once include()和include_once()举例&#xff1a;
//
//第一种方法&#xff1a;
Require “需要引入的文件名”
//第二种方法&#xff1a;通过变量引入
$filepath&#61;”abc.php”
Require $filepath;
//第三种方法&#xff1a;
Require (“需要引入的文件名”)
//?>
A. require()和require_once()的区别&#xff1a;
一般放在php页面的最前面&#xff0c;php在执行前&#xff0c;就先读入require所引入的文件&#xff0c;一旦出现错误&#xff0c;则退出函数
这两个的区别&#xff1a;require()遇到即包含文件&#xff0c;require_once()会判断是否已经包含过了&#xff0c;如果包含过了&#xff0c;则不再包含文件。一可以节省资源&#xff0c;二可以避免重复定义的错误。
如&#xff1a;//
require”xx.php”;
require”xx.php”;
//?>
这种情况下xx.php被包含两次------------证明a.php引入两次“hello”输出
//
require”xx.php”;
require_once”xx.php”;
//?>
这种情况下&#xff0c;只会输出第一次引入输出的值&#xff0c;第二次包含时&#xff0c;不会进行读入&#xff0c;即不会输出
B.include()和include_once()的区别&#xff1a;
可以放在php页面的调用函数前&#xff0c;当php执行到时&#xff0c;才会读入include所引入的php页面&#xff0c;如果出现错误&#xff0c;程序不会退出&#xff0c;会继续执行。如&#xff1a;
Require“xx.php”&#xff1b;echo“xxxx”&#xff1b;
如果xx.php文件不存在&#xff0c;echo语句是不会执行的&#xff0c;在require时就停止了
Include“xx.php”&#xff1b;echo“xxxx”&#xff1b;
如果xx.php文件不存在&#xff0c;echo语句是可以继续执行的
同样的include“xx.php”;
include“xx.php”;会读入两次xx.php&#xff0c;而include_once就没有这样的问题。
Include和require的区别(同时也就是include_once和require_once的区别)&#xff1a;
相同的地方&#xff1a;都可以引入别的页面&#xff1b;
不同的地方&#xff1a;include如果出现了错误可以继续执行&#xff0c;require出现了错误则终止执行。
小结 我们应当使用哪个&#xff1f;
我们做项目时&#xff0c;基本上使用的是require_once&#xff0c;我们的require和require_once应当放在php的最前面。
深入理解函数的调用&#xff1a;
1、 函数执行规则&#xff0c;只要一看到函数&#xff0c;则php就会开辟一个新栈(空间)
2、 每个栈间的变量是相互独立的。
例子1&#xff1a;
//
Function abc($n){
If($n>2){
Abc(--$n); (函数自己调用自己称为递归调用)
}
Echo’$n&#61;’.$n.”
”;
}
Abc(4)
//?>
这个函数输出的是&#xff1a;
$n&#61;2
$n&#61;2
$n&#61;3
例子2&#xff1a;
//
Function abc($n){
If($n>2){
Abc(--$n);
}else{
Echo’$n&#61;’.$n.”
”;
}
}
Abc(4)
//?>
这个函数输出的是&#xff1a;
$n&#61;2
函数的深入讨论&#xff1a;
① 函数的参数列表可以是多个&#xff1b;
② 参数列表可以是多个&#xff0c;并且数据类型可以是php语言支持的任意类型&#xff1b;
③ 函数名开头的字母&#xff0c;以_或者A-Z或者a-z&#xff0c;不要用数字或者特殊字符开头&#xff0c;后面加字母、数字或下划线&#xff1b;
④ 函数名是不区分大小写的&#xff1b;(变量是区分大小写的)
Function abc()和function Abc()是同一个函数&#xff1b;
⑤ 一个自定义函数中的变量是局部的&#xff0c;函数外不生效&#xff1b;
⑥ 使用global全局变量的时候&#xff0c;可以用在函数外的变量&#xff1b;
//
$a&#61;12;
Function abc(){
$a;
$a&#43;&#61;45; //要声明$a
}
Abc();
Echo’$a’;
//?>
这里输出的是12
//
$a&#61;12;
Function abc(){
Global $a;//表示要在abc()中使用到外层的$a&#xff1b;
$a&#43;&#61;45;//要声明$a
}
Abc();
Echo’$a’;
//?>
这里输出的是:57
Php中有三种提示错误&#xff1a;
① notice&#xff1b;注意
② warning&#xff1b;警告
③ error。错误
函数使用时的注意事项
函数的深入使用&#xff1a;
① 如果在函数中&#xff0c;我们不希望使用某个变量&#xff0c;或者是希望彻底的不再使用某个变量&#xff0c;则可以使用unset(变量名)来将该变量彻底删除。
$a&#61;12;
Function abc($a){
Unset($a);//表示不再abc()函数范围内&#xff0c;不再使用$a后面需要重新定义
$a&#61;45;
}
Abc($a);echo $a;
② 函数默认值问题&#xff1b;在php中我们可以给某些参数赋一个默认值
Function abc($b,$a&#61;2){
$res&#61;$a&#43;$b;
Return $res;
}
$e&#61;70;
Echo abc($e).’||’;//这里没有给$a赋值&#xff0c;则默认是2&#xff0c;输出72
Echo abc($e,90);//这里$a重新赋值了&#xff0c;输出160
$f&#61;40&#xff1b;
Echo abc($e&#xff0c;$f)&#xff1b;//这里也是重新赋值了&#xff0c;输出110.
③ php默认是值传递&#xff0c;如果需要引用(地址)传递函数&#xff0c;使用&变量名&#xff1b;
$a&#61;213;
Function abc(&$a){
$b&#61;314;
}
Abc($a);
Abc $a;
位运算
看下面的代码会输出的a b c的结果是多少
1、
//
$a&#61;1<<2;
$b&#61;-1<<2;
$c&#61;1>>2;
$d&#61;-1>>2;
Echo”a&#61;”.a;
Echo”b&#61;”.b;
Echo”c&#61;”.c;
Echo”d&#61;”.d;
// ?>
3、 在php中下面的表达式运算的结果是&#xff1a;
~2&#61;&#xff1f;
2&3&#61;&#xff1f;
2|3&#61;&#xff1f;
~-5&#61;?
13&7&#61;?
5|4&#61;?
-3^3&#61;?
l 二进制&#xff1a;就是逢二进一
二进制只有0和1两个数&#xff0c;简单&#xff0c;易于电子方式的实现&#xff0c;同时&#xff0c;通过0和1组合可以表示任意一个数。
二进制的三个重要概念&#xff1a;原码、反码、补码
1、 原码&#xff1a;
正数的原码、反码、补码都一样
用二进制来表示的一个数&#xff0c;这个码就是原码
1----à原码&#xff1a;00000000 00000000 00000000 00000001
2、反码&#xff1a;
负数有反码&#xff1a;负数的反码&#61;它的符号位不变&#xff0c;其他位取反
-1的原码&#xff1a;10000000 00000000 00000000 00000001
-1的反码&#xff1a;11111111 11111111 11111111 11111110
-1的补码&#xff1a;11111111 11111111 11111111 11111111
3、补码&#xff1a;
负数的补码&#61;它的反码&#43;1
对于有符号的而言&#xff1a;
①二进制的最高位是符号位&#xff1a;0表示正数&#xff0c;1表示负数&#xff1b;
②正数的原码、反码、补码都一样&#xff1b;
③负数的反码&#61;它的符号位不变&#xff0c;其他位取反(0->1&#xff0c;1->0)
④负数的补码&#61;它的反码&#43;1&#xff1b;
⑤0的反码&#xff0c;补码都是0&#xff1b;
⑥Php没有无符号数&#xff0c;换言之&#xff0c;php中的数都是有符号的&#xff1b;
⑦ 在计算机运算的时候&#xff0c;都是以补码的方式来运算的&#xff1a;(这句话的意思就是&#xff0c;不管数是正数还是负数&#xff0c;都要被转化成补码&#xff0c;然后进行运算)
l 位运算符
下图的前四个是位运算&#xff0c;后两个是移位运算
Php中有4个位运算&#xff1a;
按位与&&#xff1a;两位数全为1&#xff0c;则结果为1&#xff1b;
按位或|&#xff1a;两位数有一个为1&#xff0c;则结果为1&#xff1b;
按位异或^&#xff1a;两位数一个为0&#xff0c;一个为1&#xff0c;则结果为1&#xff1b;
按位取反~&#xff1a;0->1,1->0&#xff1b;
例子&#xff1a;
~2&#61;- 3
步骤&#xff1a;
①
先求2的补码&#xff1a;2是正数&#xff0c;故原码&#61;反码&#61;补码&#xff1b;
2的原码(补码)&#xff1a;00000000
00000000 00000000 00000010
② ~2
取反&#xff1a;11111111 11111111 11111111
11111101(变成负数)…这是补码的形式&#xff0c;要反推到原码
③
按照负数的补码&#61;它的反码&#43;1来对其进行反推&#xff1a;
取反后&#xff1a;11111111 11111111 11111111
11111101
反码&#xff1a;11111111 11111111 11111111 11111100
原码&#xff1a;10000000 0000000 0000000 00000011
④
-à转成十进制&#61;-3
所以结果是&#xff1a;~2 &#61; -3
2&3&#61;2
①先找2的补码&#xff1a;00000000 00000000
00000000 00000010
3的补码&#xff1a;00000000 00000000 00000000 000000011
②
2&3&#xff1a;00000000 00000000 00000000
00000010(最后两位&运算)这里还是补码
②转成原码(结果还是正数)&#xff1a;00000000
00000000 00000000 00000000 00000010
③转成十进制&#xff1a;--à2
所以结果是&#xff1a;2
l 位移运算
Php中有移位运算符&#xff1a;
<>算术右移和算术左移&#xff0c;规则是&#xff1a;
算术右移&#xff1a;低位溢出&#xff0c;符号位不变&#xff0c;并用符号位补溢出的高位&#xff1b;
算术左移&#xff1a;符号位不变&#xff0c;低位补0.
相当于左移n位乘以2的n次方&#xff0c;即5*8等价于5<<3
完成下列案例&#xff1a;
$a&#61;1<<2;
①找1的补码(就是原码)&#xff1a;00000000
00000000 000000000 00000001
②
算术左移2位00000000 00000000 00000000 00000000(是补码)
②反推原码&#xff1a;还是0
输出&#xff1a;0
$b&#61;-1<<2;
①找-1的原码&#xff1a;10000000
00000000 00000000 00000001
反码&#xff1a;
11111111 11111111 11111111 11111110
补码&#xff1a;11111111
11111111 11111111 11111110
②算术左移2位的结果&#xff1a;11111111
11111111 11111111 11111111(负数&#xff0c;这里是补码)
③反推原码&#xff1a;11111111
11111111 11111111 11111111-à11111111 11111111
11111111 11111110-à10000000 00000000 00000000
00000001&#61; - 1
结果输出&#xff1a;- 1