首页 > 编程语言 >【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解

时间:2023-03-23 12:02:50浏览次数:67  
标签:web 逻辑 echo 运算符 num PHP

前言

PHP 开发基础开速入门系列目录:

  1. 【web 开发基础】php 开发基础快速入门 (1)-PHP 介绍及开发环境快速安装和基本使用介绍
  2. 【web 开发基础】php 开发基础快速入门 (2)-PHP 的程序开发
  3. 【web 开发基础】php 开发基础快速入门 (3)-PHP 程序符号标记和程序注释的使用及空白符详解
  4. 【web 开发基础】php 开发基础快速入门 (4)-PHP 常量详解
  5. 【web 开发基础】PHP 快速入门(5)-PHP 运算符之算术运算符和字符串运算符详解
  6. 【web 开发基础】PHP 快速入门(6)-PHP 运算符之赋值运算符详解
  7. 【web 开发基础】PHP 快速入门(7)-PHP 运算符之比较运算符详解
  8. 【web 开发基础】PHP 快速入门(8)-PHP 运算符之逻辑运算符详解

位运算符的简介

任何信息在计算机中都是以二进制数的形式保存的,位运算符允许多整型数据中指定的位进行置位。如果左右参数都是字符串,则位运算符操作字符的ASCII值,浮点数也会自动转换为整型参与位运算。位运算用于对操作数中的每个二进制位进行运算,包括位逻辑运算符和位移运算符。没有借位和进位

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解_开发基础

位运算符还可以和赋值运算符相结合,进行为运算符的赋值操作。

<?php
$a &= $b;  等价于 $a = $a & $b;
$a >>= $b; 等价于 $a = $a >> $b;

位运算虽然用于对操作数中的每个二进制位进行运算,可以完成一些底层的系统程序设计,但是在程序开发时很少用到这些位运算,因为使用PHP程序很少参与到计算机底层的技术.本文着重介绍两个位运算:'&' 和 '|'

按位与(&)

规则是参与运算的两运算量相应位均为1时该位为1,否则为0.即0 & 0=0;0& 1=1; 1&0=0;1&1=1,;

<?php

$a = 40; //00000000 00000000 00000000 00101000
$b = 50; //00000000 00000000 00000000 00110010
//按位与:   00000000 00000000 00000000 00100000 ($c) 十进制: 32
$c = $a & $b; //32

echo $c;

执行结果:

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解_PHP_02

按位或(|)

规则是参与运算的两运算量相应位有一位为1时该位为1,否则为0. 即:0|0=0;0|1=1;1|0=1;1|1=1;

<?php

$a = 40; //00000000 00000000 00000000 00101000
$b = 50; //00000000 00000000 00000000 00110010
//按位或:  00000000 00000000 00000000 00111010 ($c) 十进制: 58
$c = $a | $b; //58

echo $c;

执行结果:

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解_php_03

位运算符也可以将boolean类型的值转换为整型再进行按位运算,例如,将true转换为1;再将1转换成对应的二进制位。将false转换为0,再将0转换为对应的二进制位。所以就可以使用位运算符中的按位与'&'和按位或"|"作为逻辑运算符使用,逻辑判断之后的结果为1或0,在PHP中又可以作为布尔类型的真和假使用.

<?php

var_dump(true && true);
var_dump(true & false);

var_dump(false || false);
var_dump( false | true);

执行结果:

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解_PHP_04

逻辑判断是我们在开发时必不可少的应用,现在有两种符号可以用于逻辑判断,那么在开发时使用哪种会比较好呢?

其实不仅是逻辑判断有两种方式,有很多重复的方式用来完成同样的功能,例如:for 和 while结构都可以用来完成同样的循环功能,如果能够找到他们之间的区别,就会知道在什么情况下,选择相同的方式中的哪一种方式应用效果会更好.所以运算符"&&"和"&",以及"||"和"|"作为逻辑判断时,他们之间是有区别的。

逻辑运算符中逻辑与“&&”和逻辑或“||”存在短路的问题。例如,逻辑与“&&”两边的布尔值类型操作数都为true时,结果才为真.如果运算符"&&"前面的布尔值操作数为false,就不会执行"&&"后面的表达式,结果也一样为false,这样就形成了短路,"&&"后边的表达式没有执行到.如果"&&"前面的表达式为true,这时才去执行它后面的表达式。同样逻辑或'||'也同样存在短路的情况,如果“||”前面的表达式为true时,“||”后面的表达式不会继续执行,结果一样为true,这样同样形成了短路的情况。只有“||”前面的表达式为false时,才会执行后面的表达式。

位运算符中的按位与“&”和按位或“|”作为逻辑判断时不存在短路的问题,它们不会判断其前面的表达式是true还是false,两边的表达式都会执行到。具体代码如下:

<?php

$bool = false; //声明一个boolean类型变量,初始值为:false
$num = 10; //声明一个整型变量,初始值为:10

if($bool && ($num++ > 0)){  //&&前面的$bool的值为false,发生短路,$num++没有执行到,$num的值保持不变:10
	echo "条件不成立<br>";
	
}

echo $num; //没有执行,所以$num的值还是10
echo '<br>';

if($bool & ($num++ > 0)){  //&不会发生短路,$num++被执行,结果为11
	echo "条件不成立<br>";
	
}

echo $num;//11
echo '<br>';

$bool = true; //声明一个boolean类型变量,初始值为:false
$num = 10;

if($bool || ($num ++ > 0)){ //||前面的表达式为true,发生短路,$num++没有执行到,$num的值保持不变:10
	echo "条件成立<br>";
}
echo $num; 
echo '<br>';

if($bool | ($num++ > 0)){  //|不会发生短路,$num++被执行,结果为11
	echo "条件成立<br>";
	
}
echo $num;//11

执行结果:

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解_开发基础_05

逻辑运算符短路情况常用技巧:

<?php

error_reporting(0);//屏蔽错误,因为mysql()已经不建议用,用建议使用mysqli(),所以会出现警告提示,这里屏蔽错误提示,以免影响理解

//如果逻辑或"or"前面的数据库连接不成功,才执行die输出错误的信息并退出程序. or 等同于 ||
$link = mysql_connect("localhost", "root", "123456") or die("数据库连接失败!");

//如果1逻辑或"||"前面的文件打开不成功,才执行die输出错误信息并退出程序, ||同 or 是一样的
$file = fopen("http://www.baidu.com","r") || die("文件打开失败!");


$num =10;

//如果$num是整型就执行后面的操作,否则不执行后面的表达式,and和使用&&是一样的

is_int($num) and $num += 10;

var_dump($num);

执行结果:

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解_PHP_06

:位运算时的数据类型为string/integer时,分析是要转换为二进制形式,但在程序中书写及输出结果仍为string/integer类型。

标签:web,逻辑,echo,运算符,num,PHP
From: https://blog.51cto.com/micai01/6144614

相关文章

  • windows下使php实现守护进程
    github:仓库地址: https://github.com/kohsuke/winsw下载地址: https://github.com/winsw/winsw/releases步骤:1.先到https://github.com/kohsuke/winsw/releases下载......
  • webpack的基本使用(一)
    学习目录什么是webpack1、webpack是一个工具,用来把前端工程化的。2、它提供了友好的前端模块化开发支持,以及代码压缩混淆(能让文件体积更小)、处理浏览器端J......
  • 核心网页指标 WebVitals 优化遇到的问题
    1.FCP时间太久。首屏不应该包含动态内容,内容在动,可能会被认作没有完成FCP的渲染。2.关于CLS。CSS不应该包含在页面中间,如果页面中间有CSS,建议移动到页面头部Head里面。3.......
  • Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
    上面讲了使用使用Socket搭建多客户端的连接与通信。那么如果在Netty中使用WebSocket进行长连接通信要怎么实现。WebSocket现在,很多网站为了实现推送技术,所用的技术都是Ajax......
  • 微信小程序websocket的使用
    微信小程序websocket的使用微信小程序中使用websocket分为两步:一、现在微信公众平台的开发者工具中配置socket的域名   二、开始编写业务代码业务代码大致可以......
  • dynamic web module讲解
    一。java的web系统有多种类型,比如静态的和动态的,然后动态的javawebproject要设置dynamicwebmodule,也就是动态网页模型,他必须要和对应的服务器搭配好了才能跑,今天看见的......
  • 获取当前web站点路径
    1.//获取当前we站点的路径(在做上传下载的时候,可以使用)2.privateStringgetWebpath(HttpServletRequestrequest){3.//returnrequest.getSession().getServlet......
  • ASP.NET Web API 实现 Token 验证代码
    publicclassTokenController:ApiController//定义一个名为TokenController的类,继承自ApiController类。{[HttpPost]//使用HTTPPOST请求方式。p......
  • Java运算符
    Java运算符Java运算符有:算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符算术运算符A=10,B=20操作符描述例子+加法,运算符两侧的值相加......
  • 【Javaweb】html frame标签的使用 | 导航栏右侧内容的实现
    问题的产生:是我和同伴做了一个导航栏,但是我们不知道怎么实现右侧内容的切换    然后我们查了很多资料,但是有一些是垂直的,但是就如图可见,我们是水平的,那么怎么实......