【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
其他类型转数值的说明
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); #stringvar_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
$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; #helloMangoecho '<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.运算结束之后都必须转换成原码才是最终要显示的数据
运算符优先级问题
运算符优先级:在多种运算符同时存在的时候,如何结合运算
相关文章:

【PHP】数据类型运算符位运算
文章目录 数据类型简单(基本)数据类型:4个小类复合数据类型:2个小类特殊数据类型:2个小类类型转换类型判断整数类型浮点类型布尔类型 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自…...

使用 Nacos 作为 Spring Boot 配置中心
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

微服务 Eureka
Eureka Eureka是Netflix开源的一个用于构建基于微服务架构的服务发现和注册中心技术。在微服务架构中,系统被拆分成多个小型、自治的服务,每个服务负责特定的业务功能。这些服务需要能够相互发现和通信,这就是Eureka所提供的功能。 Eureka主…...

Spring Boot 事务和事务传播机制
1. 为什么需要事务? 事务定义 将一组操作封装成一个执行单元 (封装到一起),这一组的执行具备原子性, 那么就要么全部成功,要么全部失败. 为什么要用事务? 比如转账分为两个操作: 第一步操作:A 账户-100 元。 第二步操作:B账户 100 元。 如果没有事务&a…...

计算机组成原理(巨巨巨基础篇)
有关《计算机组成原理》课本中有关 内存计算换算(字,位,字节) 个人理解 前面知识点搭建框架,最后两道例题是直观理解体会 主存储器的基本概念 位:存储信息的最小单位,称为存储位或存储元。 背…...

C语言:选择+编程(每日一练Day7)
目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:图片整理 思路一: 思路二: 题二:寻找数组的中心下标 思路一࿱…...
leetcode做题笔记93. 复原 IP 地址
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.2…...
HTTPS 中间人攻击
HTTPS 中间人攻击 中间人攻击过程 通讯过程 客户端——中间人——服务器 过程如下 服务器向客户端发送公钥攻击者截获公钥,保留在自己手上然后攻击者自己生成一个【伪造的】公钥,发给客户端客户端收到【伪造的】公钥后,利用【伪造的】公…...

MATLAB打开excel读取写入操作例程
本文使用素材含代码测试用例等 MATLAB读写excel文件历程含,内含有测试代码资源-CSDN文库 打开文件 使用uigetfile函数过滤非xlsx文件,找到需要读取的文件,首先判断文件是否存在,如果文件不存在,程序直接返回&#x…...

[C语言]分支与循环
导言: 在人生中我们总会有选择,**如下一顿吃啥?**又或者每天都是在重复,吃饭!!!!,当然在C语言中也有选择和重复那就是分支语句与循环语句 文章目录 分支循环循环中的关键…...

绘制区块链之链:解码去中心化、安全性和透明性的奇迹
区块链技术以其去中心化、安全性和透明性等特点在全球范围内引起了广泛的关注和兴趣。区块链是一种分布式账本技术,通过将数据以不可篡改的方式链接在一起,创建了一个安全可靠的数据库。这种革命性的技术正在许多领域中发挥作用,包括加密货币…...

4G工业路由器的功能与选型!详解工作原理、关键参数、典型品牌
随着工业互联网的发展,4G工业路由器得到越来越广泛的应用。但是如何根据实际需求选择合适的4G工业路由器,是许多用户关心的问题。为此,本文将深入剖析4G工业路由器的工作原理、重要参数及选型要点,并推荐优质的品牌及产品,以提供选型参考。 一、4G工业路由器的工作原理 4G工业…...
c与c++中struct的主要区别和c++中的struct与class的主要区别
1、c和c中struct的主要区别 c中的struct不可以含有成员函数,而c中的struct可以。 C语言 c中struct 是一种用于组合多个不同数据类型的数据成员的方式。struct 声明中的成员默认是公共的,并且不支持成员函数、访问控制和继承等概念。C中的struct通常被用…...
mysql中char_length()和length()
MySQL中计算字符串长度有两个函数分别为char_length和length。 char_length char_length函数可以计算unicode字符,包括中文等字符集的长度 char_length(‘string’)/char_length(column_name) 1、返回值为字符串string或者对应字段长度,长度的单位为字…...

Numpy学习笔记
科学计算库(Numpy) 通常数据都能转换成矩阵,行就是每一条样本数据,列就是每个字段的特征,Numpy在矩阵运算上非常高效,可以快速处理数据并进行数据计算。 Numpy基本操作 先导入 import numpy as nparray…...

LAMP配置与应用
目录 一、LAMP架构的组成 1、WEB资源类型 2、LAMP架构的组成 二、编译安装LAMP 编译安装apache 1、环境准备 2、导入apache相关压缩安装包,然后安装编译环境 3、解压软件包,并移动apr包与apr-util包到安装目录中,并切换到http解压出…...

Dockerfile搭建LNMP运行Wordpress平台
Dockerfile搭建LNMP运行Wordpress平台 一、项目1.1 项目环境1.2 服务器环境1.3 任务需求 二、Linux 系统基础镜像三、Nginx1、建立工作目录2、编写 Dockerfile 脚本3、准备 nginx.conf 配置文件4、生成镜像5、创建自定义网络6、启动镜像容器7、验证 nginx 四、Mysql1、建立工作…...

数据库第十五课-------------非关系型数据库----------Redis
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...

BM2 链表内指定区间反转,为什么链表要new一个结点?
链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com) 思路就是,把需要反转的结点放入栈中,然后在弹出来。 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/#include<stack> class…...

SQL阶段性优化
😜作 者:是江迪呀✒️本文关键词:MySQL、SQL优化、阶段性优化☀️每日 一言:我们要把懦弱扼杀在摇篮中。 一、前言 我们在做系统的过程中,难免会遇到页面查询速度慢,性能差的问题,…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...