【PHP】数据类型运算符位运算

文章目录

    • 数据类型
      • 简单(基本)数据类型:4个小类
      • 复合数据类型:2个小类
      • 特殊数据类型:2个小类
      • 类型转换
      • 类型判断
      • 整数类型
      • 浮点类型
      • 布尔类型
    • 运算符
      • 赋值运算符
      • 算术运算符
      • 比较运算符
      • 逻辑运算符
      • 连接运算符
      • 错误抑制符
      • 三目运算符
      • 自操作运算符
    • 计算机码
    • 位运算
    • 运算符优先级问题

数据类型

数据类型:data type,在PHP中指的是存储的数据本身的类型,而不是变量的类型。**PHP是一种弱类型语言,变量本身没有数据类型。**在PHP中将数据分为三大类八小类:

简单(基本)数据类型:4个小类

整型:int/integer,系统分配4个字节存储,表示整数类型(有前提)

浮点型:float/double,系统分配8个字节存储,表示小数或者整型存不下的整数

字符串型:string,系统根据实际长度分配,表示字符串(引号)

布尔类型:bool/boolean,表示布尔类型,只有两个值:true和false

复合数据类型:2个小类

对象类型:object,存放对象(面向对象)

数组类型:array,存储多个数据(一次性)

特殊数据类型:2个小类

资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)

空类型:NULL,只有一个值就是NULL(不能运算)


类型转换

类型转换:在很多的条件下,需要指定的数据类型,需要外部数据(当前PHP取得的数据),转换成目标数据类型

在PHP中有两种类型转换方式:

1.自动转换:系统根据需求自己判定,自己转换(用的比较多,效率偏低)

2.强制(手动)转换:认为根据需要的目标类型转换

强制转换规则:在变量之前增加一个括号(),然后在里面写上对应类型:int/integer….其中NULL类型用到unset()。在转换过程中,用的比较多的就是

  • 转布尔类型(判断)和转数值类型(算术运算)
  • 其他类型转布尔类型:true或者false,在PHP中比较少类型换变成false

image-20230731140240524


其他类型转数值的说明

1.布尔true为1,false为0;

2.字符串转数值有自己的规则

2.1 以字母开头的字符串,永远为0;

2.2 以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)

$a = 'abc1.1.1';
$b = '1.1.1.abc';

echo $a + $b; //自动转化   1.1
echo '<hr/>',(float)$a,'<br/>',(float)$b;  #0  1.1

类型判断

通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型(相同结果为true,失败为false):是一组以is_开头后面跟类型名字的函数:is_XXX(变量名)

bool类型不能用echo来查看,可以使用var_dump结构查看

  • var_dump(变量1,变量2…)
$a = 'abc1.1.1';
$b = '1.1.1.abc';
var_dump(is_int($a)); #bool(false) 
var_dump(is_string($b));#bool(true)

还有一组函数可以用来获取以及设定数据(变量)的类型

  • Gettype(变量名):获取类型,得到的是该类型对应的字符串

  • Settype(变量名,类型):设定数据类型:与强制转换不同

    • 1.强制转换(类型)变量名,是对数据值复制的内容进行处理(不会处理实际存储的内容)
    • 2.settype会直接改变数据本身
$a = 'abc1.1.1';
$b = '1.1.1.abc';
echo gettype($a); #string

var_dump(settype($b,'int')); #bool(true)    #settype设置类型成功,返回true
echo gettype($b); #integar

整数类型

整数类型:保存整数数值(范围限制),4个字节存储数据,最大就是32位:2^32 = 42亿多(无符号数)。但是在PHP中默认是有符号类型(区分正负数)

在PHP中提供了四种整型的定义方式:十进制定义,二进制定义,八进制定义和十六进制定义

$a1 = 120;		//10进制
$a2 = 0b110;	    //2进制
$a3 = 0120;		//8进制
$a4 = 0x120;	    //16进制
echo $a1,'<hr/>', $a2,'<hr/>', $a3,'<hr/>', $a4,'<hr/>';  #120  6   80  288

进制转换

十进制:逢10进1,能够出现的数字是0-9

二进制:逢2进1,能够出现的数字是0-1

八进制:逢8进1,能够出现的数字是0-7

十六进制:逢16进1,能够出现的数字是0-9以及a-f,a表示10,依次类推


PHP中不需要用户这么复杂的去计算,提供了很多的函数进行转换 (二进制:bin 八进制:oct 十进制:dec 十六进制:hex )

  • decbin():十进制转二进制
  • decoct():十进制转八进制
  • dechex():十进制转十六进制
  • bindec():二进制转十进制

浮点类型

浮点型:小数类型以及超过整型所能存储范围的整数(不保证精度),精度范围大概在15个有效数字左右

浮点型定义有两种方式

  • $f = 1.23;

  • $f = 1.23e10; //科学计数法,其中e表示底10

$f1 = 1.23;
$f2 = 1.23e10;
var_dump($f1,$f2); #float(1.23)  float(12300000000)

尽量不用用浮点数做精确判断:浮点数保存的数据不够精确,而且在计算机中凡是小数基本上存的都不准确

$f1 = 0.7;
$f2 = 2.1 / 3;
var_dump($f1 == $f2); #bool(false)

布尔类型

布尔类型:两个值true和false,通常是用于判断比较。在进行某些数据判断的时候,需要特别注意类型转换

  • empty():判断数据的值是否为“空”,不是NULL,如果为空返回true,不为空返回false
  • isset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false

image-20230731141820018

$a;
var_dump(isset($a)); //bool(false)
var_dump(empty($a)); //bool(true)

$x = NULL;
var_dump(isset($x)); //bool(false)
var_dump(empty($x)); //bool(true)

运算符

运算符:operator,是一种将数据进行运算的特殊符号

赋值运算符

赋值运算:符号是“=”,表示将右边的结果(可以是变量、数据、常量和其它运算出来的结果),保存到内存的某个位置,然后将位置的内存地址赋值给左侧的变量(常量)。

算术运算符

算术运算:基本算术操作

  • +:执行数据累加
  • -:数据相减
  • * :键盘上没有乘法符号,使用*代替,两个数相乘
  • /:正斜杠代替,表示两个数相除
  • %:取余(模)运算,两个数(整数)相除,保留余数

在进行除法运算或者取余运算的时候,对应的除数(第二个数)不能为0


比较运算符

比较运算:比较两个数据的大小,或者两个内容是否相同,返回的结果都是布尔类型:满足返回true,不满足返回false

  • >:左边大于右边,返回结果true
  • >=:左边大于等于右边
  • <:左边小于右边
  • <=:左边小于或者等于右边
  • ==:左边的与右边的相同(大小相同)
  • !=:左边的与右边的不同(大小不同)
  • ===:全等于,左边与右边相同:大小以及数据的类型都要相同
  • !==:不全等于,只有大小或者类型不同
$a = 123; //整形
$b = '123';//字符串
var_dump($a == $b);  #bool(true) 
var_dump($a === $b); #bool(false)  大小和类型都要相同

逻辑运算符

逻辑运算:针对不同的结果进行匹配。满足条件返回true,不满足返回false

  • &&:逻辑与,左边的条件与右边的条件同时成立(两边结果都为true)
  • ||:逻辑或,左边的条件或者右边的条件只要有一个满足即可
  • !:逻辑非,对已有条件进行取反,本身为true,取反结果就是false

逻辑与和逻辑或又称之为短路运算:如果第一个表达式结果已经满足条件了,那么就不会运行逻辑运算符后面的表达式


连接运算符

连接运算:是PHP中将多个字符串拼接的一种符号

  • 使用.可以将两个字符串连接到一起
  • .= 复合运算,将左边的内容与右边的内容连接起来,然重新赋值给左边变量

例如:A .= B ==> A = A.b

$a = 'hello';
$b = 'Mango';
echo $a.$b; #helloMango

echo '<hr/>';
$a .= $b;
echo $a; #helloMango

错误抑制符

在PHP中有一些错误可以提前预知,但是这些错误可能无法避免,但是又不望报错给用户看,可以使用错误抑制符处理。

@:在可能出错的表达式前面使用@符号即可。

  • 错误抑制符通常在生产环境(上线)会用到,在开发的时候不会用:系统本身最好没有任何错误。
$a = 10;
$b = 0;
@($a / $b); //如果没有错误抑制:报错Warning: Division by zero in D:\apache\htdocs\index.php on line 86

三目运算符

三目运算:有三个表达式参与的运算(简单的的分支结构缩写)

格式:表达式1 ? 表达式2 :表达式3;

  • 如果表达式1成立,那么执行表达式2,否则执行表达式3

注意:如果表达式本身比较复杂,建议使用括号包起来

$a = 10;
$b = $a >= 10 ? 20 : 10;
echo $b ; //20

可以得知三目运算符的优先级比赋值运算符高

自操作运算符

后置自操作:先把自己所保存的值留下来,然后改变自己,自己给别人的值是原来的值;

前置自操作:先把自己改变,然后把改变后的值给别人。

$a = 0;
$b = 0;
echo $a++,'<br/>',++$b; // 0 1 
echo '<br/>',$a,'<br/>',$b;// 1 1

衍生符号:类似自操作

+=:左边的结果与右边结果相加,然后赋值给左边

-=:左边的减去右边的结果,然后复制给左边

*=:乘法操作

/=:除法操作

%=:模操作

注意:

1.右侧的内容是一个整体

$a = 10;
$b = 5;
$a -= $b-1; //相当于:$a = $a - ($b-1)
echo $a;//6

2.如果进行除法或者取余运算,那么要考虑右边表达式的结果是否为0(为0出错)


计算机码

计算机码:计算机在实际存储数据的时候,采用的二进制编码规则

  • 计算机码:原码、反码和补码
  • 数值本身最左边一位是用来充当符号位:正数为0,负数为1

位运算

&:按位与,两个位都为1,结果为1,否则为0

|:按位或,两个有一个为1,结果为1

~:按位非,一个位如果为1则变成0,否则反之

^:按位异或,两个相同则为0,不同则为1

<<:按位左移,整个位(32位),向左移动一位,右边补0 (乘以2的操作)

>>:按位右移,整个位向右移动一位,左边补符号位对应内容(正数补0,负数补1) (除以2的操作(不完全正确,因为整数除2会出现小数)

注意:

1.系统进行任何位运算的时候都是使用的补码

2.运算结束之后都必须转换成原码才是最终要显示的数据


运算符优先级问题

运算符优先级:在多种运算符同时存在的时候,如何结合运算

image-20230731150154150

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/90951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于CH552G主控的开源九键小键盘(资料齐全)

Content 1. 前言2. CH55X Arduino平台环境搭建2.1 常规安装2.2 HFS挂载本地服务器安装 3. 例程使用3.1 工程下载及编译3.2 程序烧录 1. 前言 芯片选型&#xff1a;CH552G 本文主要解决Arduino下CH552G芯片包的环境配置问题 开源地址&#xff1a;CV键盘有线小键盘 - 嘉立创ED…

2023泉城杯 easy_log的解题

压缩包解压里面是一个 access.log 日志文件。 捋数据 进行过远程命令执行 这个后续没啥用 可疑字符串 可疑字符串/upload/ma.php?logvar_dump(%27cGFzc3dvcmQ6IHNAZncjdiVmOQ%27);这个首先就判断是不是base64编码&#xff08;英文大小写、数字和、/&#xff09;以及用作后缀…

Little Kernel代码学习笔记

目录 虚拟地址转换为物理地址内核启动Multiboot头部结构启动时的寄存器状态real_start段选择子初始化BSS段 页表转换设置CR4、CR3、EFER寄存器设置页表映射 初始化IDT&#xff0c;执行lk_main 虚拟地址转换为物理地址 // start.S#define PHYS_LOAD_ADDRESS (MEMBASE KERNEL_L…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 6 Data Transfers标签页介绍

这篇文章我们介绍下Data Transfers页的配置,这里边包含的内容是IRV,我之前的文章里有讲解过IRV就是 Inter-Runnable Variables,内部runnable的之间传递数据的变量,在讲解Data Store memory的文章里我们提到了,irv也可以使用Data Store memory的方式来实现,我们先看下IRV如何…

【Java 高阶】一文精通 Spring MVC - 转发重定向(四)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

百望云华为云共建零售数字化新生态 聚焦数智新消费升级

零售业是一个充满活力和创新的行业&#xff0c;但也是当前面临很大新挑战和新机遇的行业。数智新消费时代&#xff0c;数字化转型已经成为零售企业必须面对的重要课题。 8 月 20 日-21日&#xff0c;以“云上创新 韧性增长”为主题的华为云数智新消费创新峰会2023在成都隆重召…

HTML总结1【转】

以下内容转载和参考自&#xff1a;w3school的HTML学习内容&#xff0c;HTML 简介 。 一、概述 HTML不是一种编程语言&#xff0c;它是超文本标记语言 (Hyper Text Markup Language)&#xff0c;使用标记标签来描述网页内容。HTML标签是由尖括号包围的关键词&#xff0c;标签通…

Springboot开发所遇问题(持续更新)

SpringBoot特征&#xff1a; 1. SpringBoot Starter&#xff1a;他将常用的依赖分组进行了整合&#xff0c;将其合并到一个依赖中&#xff0c;这样就可以一次性添加到项目的Maven或Gradle构建中。 2,使编码变得简单&#xff0c;SpringBoot采用 JavaConfig的方式对Spring进行配置…

【mysql是怎样运行的】-EXPLAIN详解

文章目录 1.基本语法2. EXPLAIN各列作用1. table2. id3. select_type4. partitions5. type 1.基本语法 EXPLAIN SELECT select_options #或者 DESCRIBE SELECT select_optionsEXPLAIN 语句输出的各个列的作用如下&#xff1a; 列名描述id在一个大的查询语句中每个SELECT关键…

二叉树的层序遍历及完全二叉树的判断

文章目录 1.二叉树层序遍历 2.完全二叉树的判断 文章内容 1.二叉树层序遍历 二叉树的层序遍历需要一个队列来帮助实现。 我们在队列中存储的是节点的地址&#xff0c;所以我们要对队列结构体的数据域重定义&#xff0c; 以上代码 从逻辑上来讲就是1入队&#xff0c;1出队&am…

建模杂谈系列234 基于图的程序改造

说明 为了进一步提升程序设计与运维的可靠性&#xff0c;我觉得&#xff08;目前看来&#xff09;只有依赖图的结构。 提升主要包含如下方面&#xff1a; 1 程序结构的简洁性&#xff1a;节点和边2 程序执行的可视化&#xff1a;交通图(红、黄、绿)3 程序支持的逻辑复杂性。…

数据结构—循环队列(环形队列)

循环队列&#xff08;环形队列&#xff09; 循环队列的概念及结构循环队列的实现 循环队列的概念及结构 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。…

用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0) Part II

用Cmake build OpenCV后&#xff0c;在VS中查看OpenCV源码的方法 Part II 用Cmake build OpenCV后&#xff0c;在VS中查看OpenCV源码的方法&#xff08;环境VS2022openCV4.8.0&#xff09; Part I_松下J27的博客-CSDN博客 在上一篇文章中&#xff0c;我用cmake成功的生成了ope…

设计模式三原则

1.1单一职责原则 C 面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类&#xff0c;所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。 设计模式中所谓的单一职责原则&#xff0c;就是对一个类而言&#xff0c;应该仅有一个引起它变化的原…

我的128天创作纪念日-东离与糖宝

文章目录 机缘收获日常成就憧憬 不知不觉我也迎来了自己的128天创作纪念日&#xff0c;一起来看看我有什么想对大家说的吧 机缘 我的写博客之旅始于参加了代码随想录算法训练营。在训练营期间&#xff0c;代码随想录作者卡尔建议我们坚持每天写博客记录刷题学习的进度和心得体…

【LeetCode-中等题】240. 搜索二维矩阵 II

文章目录 题目方法一&#xff1a;暴力双for查找方法二&#xff1a;二分查找&#xff0c;对每二维数组进行拆分&#xff0c;一行一行的进行二分查找方法三&#xff1a;列倒序Z字形查找 题目 方法一&#xff1a;暴力双for查找 public boolean searchMatrix(int[][] matrix, int …

Java版B/S架构 智慧工地源码,PC、移动、数据可视化智慧大屏端源码

智慧工地是什么&#xff1f;智慧工地主要围绕绿色施工、安全管控、劳务管理、智能管理、集成总控等方面&#xff0c;帮助工地解决运营、管理方面各个难点痛点。在互联网的加持下促进项目现场管理的创新与发展&#xff0c;实现工程管理人员与工程施工现场的整合&#xff0c;构建…

系统架构师---软件重用、基于架构的软件设计、软件模型

目录 软件重用 构件技术 基于架构的软件设计 ABSD方法与生命周期 抽象功能需求 用例 抽象的质量和业务需求 架构选项 质量场景 约束 基于架构的软件开发模型 架构需求 需求获取 标识构件 需求评审 架构设计 架构文档 架构复审 架构实现 架构演化 前言&…

什么是响应式设计(Responsive Design)?如何实现一个响应式网页?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式设计&#xff08;Responsive Design&#xff09;⭐ 如何实现一个响应式网页&#xff1f;1. 弹性网格布局2. 媒体查询3. 弹性图像和媒体4. 流式布局5. 优化导航6. 测试和调整7. 图片优化8. 字体优化9. 渐进增强10. 面向移动优先11. …

一、Kafka概述

目录 1.1 定义1.2 消息队列1、传统消息队列的应用场景2、消息队列的两种模式 1.3 Kafka的基础架构 1.1 定义 Kafka传 统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 K…