笔记4数据类型.docx
《笔记4数据类型.docx》由会员分享,可在线阅读,更多相关《笔记4数据类型.docx(24页珍藏版)》请在冰豆网上搜索。
笔记4数据类型
昨日回顾2
位运算符3
位运算符的基本规则3
按位与运算:
&4
按位或运算:
|4
按位左移运算:
<<5
按位右移运算:
>>5
按位非:
6
按位异或:
6
原码,反码,补码介绍6
管理一组事物(数据)的开关状态8
确定一个灯泡的开关状态:
8
打开指定的灯泡8
关闭指定的灯泡8
数组运算符8
错误控制运算符:
@9
运算符的优先级10
流程控制10
流程图基本符号:
10
分支结构11
循环结构:
14
while循环:
14
dowhile循环15
for循环:
16
循环的中断16
部分流程控制的替换语法:
17
goto语句(跳转语句)18
控制脚本执行进度19
昨日回顾
整数类型:
3种表示形式:
$v1=123;
$v2=0123;//8进制,实际值83
$c3=0x123;//16进制,实际是291
10转为:
2,8,16进制:
以该数字连续除以(2,8,16),将每次除得的余数倒序写出,就是对应的2,8,16进制数字。
实际应用中,有系统函数可以直接获取:
decbin(),decoct(),dexhex()
2,8,16进制转为10进制:
将每个数字乘以对应位上的权值,并相加所得的结果。
系统函数:
bindec(),octdec(),hexdec();
浮点数类型:
2种表示法:
$v1=1.23;//带小数点
$v2=123E4;//带科学计数法的符合E(e)
$v3=123e4e5;//是吗?
这个不对!
浮点数的小数部分,在二进制层次上,是往往不能准确表示的数据。
则,浮点数的大小比较就要非常谨慎:
尽量不进行大小比较。
如果非要比较,最应该在考虑精确度的基础上,转换为整数进行比较。
字符串类型:
单引号字符串:
可识别的转义符:
\\\’
说明:
实际上,只有字符串中的最后一个“\”才必须使用转义符。
例:
$v1=‘abc\defg’;//有效
$v2=‘abc\\defg’;//也有效,而且跟上一行一样
$v1=‘abcdefg\\’;//此时“\\”必须写。
双引号字符串:
可识别的转义符:
\\\”\n\r\t\$
还有一个特征:
可以识别双引号字符串中的变量(以$为标志)。
推论:
如果一个字符串中没有需要识别的转义符,也没有需要识别的变量,则推荐使用单引号字符串。
单引号定界符(nowdoc):
无转义符
$v1=<<<’ABCD’
............
ABCD;
双引号定界符(heredoc):
可识别的转义符:
\\\n\r\t\$
$v1=<<<”ABCD”
............
ABCD;
布尔类型:
能被转换为false的值有:
””,0,0.0“0”,null,array(),未定义
其他的都当作true
类型转换:
php作为一门弱类型语言,类型的自动转换是很常见的——常态。
类型的强制转换,反而没那么多。
自动转换:
通常是根据运算符的需要而发生。
强制转换:
(目标类型)数据
算术运算符:
+-*/%++--
%:
取余(取模)运算符,会先将运算数自动转换为整数,再进行运算(对比:
js不会转换)
++:
自加运算,对参与运算的“变量”自身加1。
可以出现在变量的前面(前加加),或出现在变量的后面(后加加)。
前加加后加加对变量本身来说,没有区别(都是自加1),但对其所在行的其他运算或操作有区别:
前加加:
先自加,后运算其他;
后加加:
先运算其他,后自加。
比较运算符:
>>=<<===!
====!
==
比较运算符的规则:
1,常规:
对数字进行大小比较。
2,如果不是数字,而包含布尔值,则转换为布尔值运算
3,否则,饱含数字,则转换为数字比较
4,否则,但都是纯数字字符串,也被当作数字比较
5,否则按字符串
逻辑运算符:
前提:
都是对布尔值进行运算。
如果不是布尔值,就会转换为布尔值进行运算。
逻辑与运算:
只有2个都是true,结果才是true
逻辑或运算:
只有两个都是false,结果才是false;
非:
取反。
短路现象:
逻辑与短路:
if(getB1()&&getB2()){......},则如果getB1()结果是false,就发生短路了。
逻辑或短路:
if(getB1()||getB2()){......},则如果getB1()结果是true,就发生短路了。
位运算符
位运算符的基本规则
1,位运算符都是针对整数的二进制数字形式而进行的。
2,按位与运算基本规则(规则表):
1&1==>1
1&0==>0
0&1==>0
0&0==>0;
3,按位或运算基本规则
1|1==>1;
1|0==>1;
0|1==>1
0|0==>0
4,按位非运算:
~1==>0
~0==>1
5,按位异或运算:
1^1==>0
0^0==>0
1^0==>1
0^1==>1
规律:
相同就是0,不同就是1
按位与运算:
&
形式:
A&B;//A和B都是数字,其实是常规的10进制数字,但内部会按二进制进行计算
含义:
将A和B的二进制形式的每一个位上的二进制数字进行按位与(&)运算之后的结果。
说明:
一个数字的二进制形式通常是32位的0和1的组合,也可能是64位,但未了说明问题,我们通常只用8位。
举例:
$r1=9&13;//9的二进制是“1001”,13的二进制是“1101”
数字9
0
0
0
0
1
0
0
1
数字13
0
0
0
0
1
1
0
1
结果$r1
0
0
0
0
1
0
0
1
可见结果是“00001001”,即9
结果为:
按位或运算:
|
形式:
A|B;//A和B都是数字,其实是常规的10进制数字,但内部会按二进制进行计算
含义:
将A和B的二进制形式的每一个位上的二进制数字进行按位或(|)运算之后的结果。
举例:
$r1=18|10;//18的二进制是“10010”,23的二进制是“1010”
数字18
0
0
0
1
0
0
1
0
数字10
0
0
0
0
1
0
1
0
结果$r1
0
0
0
1
1
0
1
0
可见结果是“00011010”,即26
结果:
按位左移运算:
<<
形式:
A<含义:
将数字A的二进制形式的每一个位上的数字往左边移动指定的位数n,则最左边的n位移出去了就不管了,最右边空出来的n位,补0就可以。
举例:
$r1=9<<2;//9的二进制形式为:
1001
数字9
0
0
0
0
1
0
0
1
左移2位
0
0
1
0
0
1
0
0
结果
0
0
25
0
0
22
0
0
可见结果是:
32+4=36
按位右移运算:
>>
形式:
A>>n;//A是一个要被移动的数字,同样可以是普通数字,但按二进制去运算,n是一个指定要移动的位数
含义:
将数字A的二进制形式的每一个位上的数字往右边移动指定的位数n,则最右边的n位移出去了就不管了,最左边空出来的n位,补0就可以(对正数,实际是补符号位)。
举例:
$r1=9>>2;//9的二进制形式为:
1001
数字9
0
0
0
0
1
0
0
1
右移2位
0
0
0
0
0
0
1
0
结果
0
0
0
0
0
0
21
0
结果就是:
2
结果:
按位非:
将一个数字的二进制形的每一个二进制数字取反所得到的结果。
按位异或:
将2个整数的二进制形式的每一个对应数字进行异或运算之后的结果。
原码,反码,补码介绍
原码:
就是“原来的二进制码”,其实就是我们可以理解的按10进制转换为二进制之后得到的一个字符码。
原码在数学上都是可以理解的。
但在实际的计算机的运行过程中,却常常不用原码,所以就有反码,补码的问题。
在此基础上上,规则:
一个二进制数字的第一个位是符号位,0表示正数,1表示负数。
举例(都以8位为例):
7:
00000111
-7:
10000111
反码:
正数的反码是其本身。
负数的反码,就是将原码的非符号部分,每一位取反。
举例:
7:
00000111
-7:
11111000
补码:
正数的补码是其本身。
负数的反码,符号位不变,其余每一位取反之后,整体加1(即反码加1)
举例:
7:
00000111
-7:
11111001
小总结:
1,数据才cpu内部都是按补码进行运算。
2,原码,反码,补码的转换过程是系统内部的工作,且转换时符号位不变;
3,用补码运算时,符号位参与运算(即当作一个普通的二进制位的数字进行运算)
管理一组事物(数据)的开关状态
开关状态:
就是某种数据,它只有2个值可用:
true,false,1,0,开,关。
。
。
。
。
一组事物是指,多个数据的的任意可能的出现状态。
我们假设有5个灯泡的开关需要管理:
1,确定每个灯泡的状态:
开,关;
2,可以指定打开任意一个灯泡;
3,可以指定关闭任意一个灯泡。
设定前提:
这5个灯泡有明确的顺序,我们将设定5个变量(常量其实也行)。
假设1-5个灯泡的位置是从右往左边数——对应数字的位数
第1个灯泡:
$d1=1;//00000001
第2个灯泡:
$d2=2;//00000010
第3个灯泡:
$d3=4;//00000100
第4个灯泡:
$d4=8;//00001000
第5个灯泡:
$d1=16;//00010000
则所有灯泡的总的状态,就可以使用一个变量来描述:
比如:
如果$state=7;//00000111,就表示第1,2,3灯泡亮
如果$state=9;//00001001,就表示第1,4灯泡亮
如果$state=13;//00001101,就表示第1,3,4灯泡亮
确定一个灯泡的开关状态:
$s1=$state&$dn;//这里n表示1-5之间的任意一个。
则结果如果$s1大于0,就表示该灯泡亮,否则就表示该灯泡是灭的。
打开指定的灯泡
$state=$state|$dn;//这里n表示1-5之间的任意一个
关闭指定的灯泡
$state=$state&~$dn;//这里n表示1-5之间的任意一个
参考课堂代码:
day4》zhuangtai_guanli.php
数组运算符
注意:
php中,数组的元素的顺序,不是由下标(键名)决定的,而是完全由加入的顺序来决定。
∙联合(+):
将右边的数组项合并到左边数组的后面,得到一个新数组。
如有重复键,则结果以左边的为准
$v1=array(1,2,3,4);
$v2=array(5,6,7,8,9);
$r1=$v1+$v2;//结果只能是:
array(1,2,3,4,9)
∙相等(==):
如果两个数组具有相同的键名和键值(可以顺序不同,或类型不同),则返回true
$v1=array(1,2,3,4);
$v2=array(4,2,1,3);
$v3=array(3=>4,1=>2,0=>1,2=>3);
此时:
$v1和$v2相等吗?
——不等
此时:
$v1和$v3相等吗?
——相等
∙不相等(!
=,<>):
如果两个数组不是相等(==),则返回true
∙全等(===):
如果两个数组具有相同的键名和键值且顺序和类型都一样,则返回true
∙不全等(!
==):
如果两个数组不是全等(===),则返回true
错误控制运算符:
@
通常用于一个“可能”发生错误的表达式的前面——最常用的情形就是连接数据库。
$link=@mysql_connect(“localhost,”’,“”,’”);
不过,在应用中,还会更进一步:
其中or也是逻辑运算符,通常只用在这种位置。
通常错误控制运算符用在程序开发测试阶段无法预测的可能出错的位置——一般是获取外部资源的时候。
运算符的优先级
∙要意识到运算符有优先级问题
∙括号最优先,赋值最落后(通常)
∙先乘除后加减
∙大致:
算术运算符〉比较运算符〉逻辑运算符(除了“非”运算)
流程控制
流程图基本符号:
开始结束:
语句(块):
判断:
输入输出:
走向
分支结构
if语句:
if(条件判断){
//语句块
}
ifelse语句:
if(条件判断){
//分支1
}
else{
//分支2;
}
ifelseif语句
if-elseif-else语句:
switch语句:
switch(一个数据$v1){//判断此v1变量跟下面的某个是否相等,如果相等,则进入对应进程。
case状态值1:
//进程1
[break;]
case状态值2:
//进程2
[break;]
case状态值3:
//进程3;
[break;]
。
。
。
。
。
。
[default:
//默认进程。
]
}
应用冲,break通常都会用上;只有一些特殊数据或需求的时候,可能不用。
如果没有使用break,则一旦某个状态满足,就会继续执行后续状态中的进程代码,而不再判断。
循环结构:
while循环:
$v1=10;//初始化循环变量
while($v1〉4){//判断循环变量的条件
//语句快
echo“abc”;
$v1--;
}
循环3要素:
1,循环变量初始化
2,循环变量判断
3,循环变量改变
此3要素通常适用于所有循环过程。
dowhile循环
do{
//循环体
}while(条件判断);
含义:
先执行一次循环体,然后判断条件,如果条件满足,则继续回去执行循环体,然后再判断,依次类推。
for循环:
循环的中断
这里指的中断,适用于所有循环。
循环的中断有两种情况:
break中断:
终止整个循环语句,而跳出循环进入到循环结构之后的语句
continue中断:
终止当前正在执行的循环体中的语句,而进入到循环的下一次过程里(改变,判断)
中断语句的语法如下:
break$n;//$n是一个大于等于1的整数,表示要中断的循环层数;
continew$n;
所谓循环层数,是指一个循环中又嵌套了循环的情况。
以当前循环为“起点”,表示第一层,往上(外)数,就是2,3,4层。
。
。
。
部分流程控制的替换语法:
if(...):
//语句块
endif;
if(...):
//语句块
else:
//语句块
endif;
if(...):
//语句块
elseif(...):
//语句块
elseif(...):
//语句块
else:
//语句块
endif;
switch(...):
case...
case...
endSwitch;
while(...):
//语句块
endwhile;
for(...;...;...):
//语句块
endfor;
foreach():
//语句块
endForeach;
goto语句(跳转语句)
goto语句给程序员极大的自由——严重不推荐适用!
它可以让我们的程序执行流程“任意跳转”。
语法:
开始〉〉〉
goto标识符1;
.......很多其他语句。
标识符1:
.......很多其他语句。
标识符2:
.......很多其他语句。
goto标识符2;
注意:
∙不能跳入循环中
∙不能跳入函数中
∙不能跳出函数外
∙不能跳出文件外
控制脚本执行进度
die(“输出内容”)
含义:
终止php脚本的运行(后续代码不再执行),并输出其中的内容
也可以:
die();die;
exit是die的同义词。
die是一种“语言结构”,并非函数,可以不写括号。
echo也是一种语言结构,而非函数:
echo(“abc”);
echo“abc”;
echo“abc”,“def”,123;
sleep($n);
含义:
让php脚本停止$n秒,然后继续执行。