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

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

前言

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值,浮点数也会自动转换为整型参与位运算。位运算用于对操作数中的每个二进制位进行运算,包括位逻辑运算符和位移运算符。没有借位和进位

网络异常,图片无法展示
|

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

<?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;

执行结果:

网络异常,图片无法展示
|

按位或(|)

规则是参与运算的两运算量相应位有一位为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;

执行结果:

网络异常,图片无法展示
|

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

<?phpvar_dump(true&&true);
var_dump(true&false);
var_dump(false||false);
var_dump( false|true);

执行结果:

网络异常,图片无法展示
|

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

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

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

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

<?php$bool=false; //声明一个boolean类型变量,初始值为:false$num=10; //声明一个整型变量,初始值为:10if($bool&& ($num++>0)){  //&&前面的$bool的值为false,发生短路,$num++没有执行到,$num的值保持不变:10echo"条件不成立<br>";
}
echo$num; //没有执行,所以$num的值还是10echo'<br>';
if($bool& ($num++>0)){  //&不会发生短路,$num++被执行,结果为11echo"条件不成立<br>";
}
echo$num;//11echo'<br>';
$bool=true; //声明一个boolean类型变量,初始值为:false$num=10;
if($bool|| ($num++>0)){ //||前面的表达式为true,发生短路,$num++没有执行到,$num的值保持不变:10echo"条件成立<br>";
}
echo$num; 
echo'<br>';
if($bool| ($num++>0)){  //|不会发生短路,$num++被执行,结果为11echo"条件成立<br>";
}
echo$num;//11

执行结果:

网络异常,图片无法展示
|

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

<?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);

执行结果:

网络异常,图片无法展示
|

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

目录
相关文章
|
7天前
|
SQL 存储 安全
PHP 与现代 Web 应用的安全挑战与解决方案
随着 Web 应用的发展,PHP 作为一种广泛使用的服务器端脚本语言,面临着越来越复杂的安全挑战。本文探讨了当前 PHP 开发中常见的安全问题,并提供了相应的解决方案,帮助开发者构建更安全可靠的 Web 应用。 【7月更文挑战第8天】
17 1
|
3天前
|
安全 大数据 编译器
PHP 8: 探索新特性及其对现代Web开发的影响
在这篇文章中,我们将深入探讨PHP 8的最新特性,包括JIT编译器、联合类型、匹配表达式等,并分析这些更新如何影响现代Web开发。通过具体示例和代码片段,本文旨在为开发者提供一个清晰的指南,以便更好地利用PHP 8的新功能优化和加速他们的应用程序。
10 2
|
3天前
|
编译器 测试技术 PHP
深入理解PHP 7的新特性及其对现代Web开发的影响
【7月更文挑战第12天】本文将探讨PHP 7版本中引入的关键改进和新增功能,以及这些变化如何优化了性能、提升了代码的可维护性,并促进了现代Web开发的最佳实践。通过具体示例,我们将深入了解这些新特性在日常开发中的应用,以及它们为开发者带来的实际益处。
10 2
|
3天前
|
PHP 开发者
PHP 8 新特性及其对现代Web开发的影响
PHP 8作为最新版本,引入了一系列强大的新特性和改进,这些变化不仅仅是语言本身的提升,更深刻地影响了现代Web开发的方式和效率。本文将深入探讨PHP 8的关键特性,分析其在开发实践中的应用和优势,帮助开发者更好地理解和利用这些新特性。 【7月更文挑战第12天】
9 1
|
7天前
|
安全 编译器 PHP
深入理解PHP 8的新特性及其对现代Web开发的影响
【7月更文挑战第8天】随着PHP 8的发布,这个广受欢迎的服务器端脚本语言迎来了重大更新,带来了性能提升和更现代化的编程特性。本文将探索PHP 8中的新特性,并分析它们如何改变开发者构建和维护Web应用的方式,同时指出这些变化对现有项目升级可能带来的挑战与机遇。
|
5天前
|
安全 编译器 数据处理
PHP 8新特性及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的服务器端脚本语言引入了多项新特性和性能改进。本文将深入探讨PHP 8的关键更新,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些变化如何影响现代Web开发实践,以及开发者如何利用这些新工具来构建更快、更安全、更易维护的应用程序。
8 0
|
5天前
|
编译器 API PHP
PHP 8新特性及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的服务器端脚本语言迎来了其发展历程中的一个重要里程碑。本文将深入探讨PHP 8引入的关键新特性,如JIT编译器、联合类型、匹配表达式等,并分析这些变化如何影响现代Web开发的实践和原则。通过具体案例和性能数据,我们将展示PHP 8如何优化代码编写、增强程序性能以及提升项目维护性,从而为开发者提供更高效、更可靠的开发体验。
7 0
|
2天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
【7月更文挑战第13天】在Web开发中,AJAX和Fetch API是实现页面无刷新数据交换的关键。在Flask博客系统中,通过创建获取评论的GET路由,我们可以展示使用AJAX和Fetch API的前端实现。AJAX通过XMLHttpRequest发送请求,处理响应并在成功时更新DOM。Fetch API则使用Promise简化异步操作,代码更现代。这两个工具都能实现不刷新页面查看评论,Fetch API的语法更简洁,错误处理更直观。掌握这些技巧能提升Python Web项目的用户体验和开发效率。
15 7
|
2天前
|
API 数据库 开发者
逆袭之路!Django/Flask助你成为Web开发界的璀璨新星!
【7月更文挑战第13天】在Python Web开发中,Django和Flask各具优势。Django适合快速构建大型项目,如在线书店,其ORM和内置功能让复杂应用轻松上手。Flask则以其轻量和灵活性见长,适用于个人博客等小型应用。选择框架应根据项目需求和个人偏好,两者都能助开发者在Web开发领域大放异彩。
11 2
|
3天前
|
数据库 开发者 Python
从菜鸟到大神,Django/Flask 让你秒变 Web 开发界的‘头号玩家’!
【7月更文挑战第12天】在Python Web开发中,Django和Flask框架各具特色。Flask轻量灵活,适合快速搭建简单应用,如博客,基本代码仅需几行。Django则功能全面,适用于复杂项目,如电商网站,内置ORM和管理后台。两者都助力开发者从新手进阶。选择取决于项目需求和个人偏好。学习和实践这两个框架,能助你成为Web开发专家。