计算机码、位运算符、运算符优先级、流程控制(顺序、分支、循环)
计算机码:计算机在实际存储数据的时候,采用的编码方式(二进制规则)
计算机码:
原码(十进制转二进制)、
反码(针对负数,左边符号为0)、
补码(针对负数,反码+1)
系统中存在两个-:+0和-0
+0:00000000
-0:10000000 原码
取反:11111111
补码:00000000
$a=5;
$b=-5;
/*
5原码:00000101
-5 原码:10000101
取反:11111010
求补:11111011
*/
位运算符:去除就三种最小的单位(bit)进行运算
&:按位与,两个位都为1,结果为1,否则为0
|:按位或,两个位一个为1,结果为1
~:按位非,一个位如果为1则变0,反之亦然
^:按位异或,两个相同则位0,向左移动一位,右边补0
<<:按位左移,整个位(32位),向左移动一位,右边补0
.>>:按位右移,整个位向右移动一位,左边补符号位对应内容(正数补0,负数补1)
//按位与
var_dump($a & $b);
/*
5 00000101
-5 11111011
& 00000001
*/
//按位非
var_dump(~$b);
/*
-5 11111011
~ 00000100
*/
//按位右移
var_dump($b>>2);
/*
-5 11111011
>>2 11111110 补码
-1 11111101 反码
取反 10000010 原码 -2
*/
//按位左移
var_dump($a>>1);
?>
注意:
1.系统进行任何运算的时候都是利用补码运算
2.运算结束后必须转成原码
3.按位左移:乘以2的操作
4.按位右移:除以2的操作(不完全正确):除二由余数会出现小数;
运算符优先级
控制分支:
- 顺序结构 :所有代码默认都是从上而下一次执行,基本结构
- 分支结构 :if 分支、switch 分支
- 循环结构 :for循环、while循环、do-while循环、foreach循环(针对数组)
if 分支:
$day="sunday";
if($day=="sunday"){
echo 'go out';
}
if($day=="sunday"){
echo 'go out';
}else{
echo 'work';
}
if($day=='sunday'){
echo 'go out';
}else if($day=='satday'){
echo 'play at home';
}else{
echo 'work';
}
switch 分支:
$day=1;
switch($day){
case 1:
echo '1';
break;
case 2:
echo '2';
break;
case 3:
echo '3';
break;
default:
echo 'error';
break;
}
for 循环
//从1到10输出:初始为1,结果为10
for($i=1;$i<=10;$i++){
echo $i,'<br/>';
}
for($i=1,$end=10;$i<=$end;$i++){
echo $i,'<br/>';
}
//无条件for循环,要避免
for(;;){
echo 'hello world';
}
while 循环 : 先判断再执行
$i=1;
while($i<=10){
echo $i,'<br/>';
$i++;
}
do-while 循环 : 先执行后判断(至少执行一次)
$i=1;
while($i<=10){
echo $i,'<br/>';
$i++;
}
循环控制:在循环内部对循环本身进行控制
中断控制:重新开始循环,循环体中还有其他内容,也要再执行
while($i<=100){
//判断是否是5的倍数
if($i%5!=0){
//说明当前$i不是5的倍数
$i++;
//重新循环
continue;
}
echo $i++,'<br/>';
}
while($i<=100){
//判断是否是5的倍数
if($i%5!=0){
//说明当前$i不是5的倍数
$i++;
//终止循环
break;
}
echo $i++,'<br/>';
}
流程控制代替语法
流程控制:分支和循环结构的替代语言
php本身是嵌入到html中的脚本语言,需要再html中书写一些关于判断或者循环的结构语法,必须符合php标签规范,需要html与php进行混搭,如果使用原始的php代码都会非常不美观。
<!DOCTYPE html>
<html>
<body>
<table border=1>
<?php for($i=1;$i<10;$i++){ ?>
<tr>
<?php for($j=1;$j<=$i;$j++){ ?>
<td>
<?php echo $i . '*' . $j . '=' .$i * $j; ?>
</td>
<?php } ?>
</tr>
<?php } ?>
</table>
</body>
</html>
运行结果
在php书写到html中这些大括号{}非常不美观,php提供了一种替代机制,让其不可以书写大括号:
<!DOCTYPE html>
<html>
<body>
<table border=1>
<?php for($i=1;$i<10;$i++): ?>
<tr>
<?php for($j=1;$j<=$i;$j++): ?>
<td>
<?php echo $i . '*' . $j . '=' .$i * $j; ?>
</td>
<?php endfor; ?>
</tr>
<?php endfor; ?>
</table>
</body>
</html>
效果与上面的一致
php提供了分支结构和循环结构的替代语法,全部都是对应的一个模式:
例如:
if: if(): endif;