php 位运算(php位运算的问题)

:暂无数据 2026-04-06 14:40:02 0
这篇文章给大家聊聊关于php 位运算,以及php位运算的问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

php位运算的问题

并不是4位二进制数取反
取反操作,两个值之和为-1
作为有符号整数,8至少要用8个二进制位表示
00001000,按位取反结果11110111,这个数是有符号整数,则为一个负数的补码,即-9
当你不知道怎么算的时候,就记住一个数与它按位取反结果之和为-1就行了

PHP语言PHP语言里的位运算符&、|、^ 、~、〈〈 、〉〉这些符号我一个也不懂,希望高手给个全面的解释!拜

"&" 按位与运算
按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下:
00001001 (9的二进制补码)
&00000101 (5的二进制补码)
00000001 (1的二进制补码)
《?php
$a = 9;
$b = 5;
echo sprintf("%b", $a&$b);
?》
"|" 按位或运算
按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下:
00001001
|00000101
00001101 (十进制为13)可见9|5=13
《?php
$a = 9;
$b = 5;
echo sprintf("%b", $a|$b)."\n"; //二进制
echo sprintf("%d", $a|$b)."\n"; //十进制
"^" 按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:
00001001
^00000101
00001100 (十进制为12)
《?php
$a = 9;
$b = 5;
echo sprintf("%b", $a^$b)."\n"; //二进制
echo sprintf("%d", $a^$b)."\n"; //十进制
"~" 求反运算
求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。
例如~9的运算为:
~(0000000000001001)结果为:1111111111110110
《?php
$a = 9;
$b = 5;
echo sprintf("%b", ~$a)."\n"; //二进制
"〈〈" 左移运算
左移运算符“《《”是双目运算符。其功能把“《《 ”左边的运算数的各二进位全部左移若干位,由“《《”右边的数指定移动的位数,高位丢弃,低位补0。
例如:
a《《4
指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
《?php
$a = 3;
$temp = $a《《4;
echo sprintf("%d", $temp)."\n"; //十进制
“》》” 右移运算
右移运算符“》》”是双目运算符。其功能是把“》》 ”左边的运算数的各二进位全部右移若干位,“》》”右边的数指定移动的位数。
例如:
设 a=48,
a》》4
表示把00110000右移为00000011(十进制3)。
应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
《?php
$a = 48;
$temp = $a》》4;
echo sprintf("%d", $temp)."\n"; //十进制

php位运算中为什么 ’a’&1=0,而不是1,a的ascii码对应值是97,那不就是97&1=1吗

  PHP 官方文档中, Bitwise Operator 中有一段话:
  If both operands for the &, | and ^ operators are strings, then the operation will be performed on the ASCII values of the characters that make up the strings and the result will be a string. In all other cases, both operands will be converted to integers and the result will be an integer.
  使用 &, | 还有 ^ 操作符的时候,只有操作符两边的值都是 string 的时候,才会使用 ASCII 去运算,返回 string,其他的所有情况下,都会把值转换成 int。
  你问题中的运算并非两个值都是字符串,所以都要被转成 int 计算。intval( ’a’ ); 的结果是0,所以相当于 0 & 1

php 位运算符概念,求解释

位运算就是直接计算二进制

比如

1 的二进制是 0x00001

2 的二进制是 0x00010

4 的二进制是 0x00100

假设我们要记录一个状态,总共有三种状态,可以多选,这样使用位运算就非常方便。

$flag = 0;
//给flag加两个状态
$flag |= 0x00001;
$flag |= 0x00101;
//此时$flag的值为0x00101
要判断$flag是否具有哪些属性 那么就可以使用
if($flag && 0x00001)    //判断是否含有1
if($flag》》1 && 0x00001) //判断是否含有2
if($flag》》2 && 0x00001) //判断是否含有4

希望我的回答能帮助你

在PHP中【逻辑运算符】和【位运算符】有什么本质的区别

这个很难细说,不过和C语言中的逻辑运算符和位运算符是一样区别的
下面给个参考(摘至某人博客):
一、逻辑运算符:
包括:1。&&逻辑与 2。||逻辑或 3。!逻辑非
逻辑运算符用于对包含关系运算符的表达式进行合并或取非
对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。关于逻辑运算符的解释
请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将==写成= =是错误的。
假设一个程序在同时满足条件a《10和b==7时,必须执行某些操作。应使用关系运算符和逻辑运算符“与”来写这个
条件的代码。用&&表示“与”运算符,该条件代码如下:
(a《10) && (b==7);
类似地,“或”是用于检查两个条件中是否有一个为真的运算符。它由两个连续的管道符号(||)表示。如果上例
改为:如果任一语句为真,则程序需执行某些操作,则条件代码如下:
(a《10) || (b==7);
第三个逻辑运算符“非”用一个感叹号(!)表示。这个运算符对表达式的真值取反。例如,如果变量s小于10,程序
程序需执行某些操作,则条件代码如下:
(s《10)

(!(s》=10)) //s不大于等于10
关系运算符和逻辑运算符的优先级一般都低于算术运算符。例如,5》4+3的计算与5》(4+3)运算符是一样的,即
先计算4+3,再执行关系运算。此表达示的结果为“假”,即,将返回0。
下面的语句
printf("%d",5》4+3);
将输出 0
可以总结为:&&的结果是真真为真。||的结果是假假为假。
二、位运算符:
包括:1。&位与符 2。|位或符 3。^位异或符 4。~位取反符
以操作数12为例。位运算符将数字12视为1100。位运算符将操作数视为位而不是数值。数值
可以是任意进制的:十进制、八进制或十六进制。位运算符则将操作数转化为二进制,并相应地返回1或0。
位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转换为数字。例如:
表达式10&15表示(1010 & 1111),它将返回表示1010的值10。因为真真得真,或者是11得1,同位全是1结果也是1
表达式10|15表示(1010 | 1111),它将返回表示1111的值15。假假得假。全零得零。
表达式10^15表示(1010 ^ 1111), 它将返回表示0101的值5。此时是同性相斥,相同的就为假。
表达式~10表示(~1010),它将返回表示0101的值 -11。此号好理解,按位取反

关于php 位运算符的问题

这个涉及到系统底层,WEB开发中几乎没用到,知道下有这个东西就好了。底层的东西解释总是简单不了的。
变量在内存中的存放都是二进制数字。整数在32位系统上是占用4字节,一个字节是8位,也就是32位,位运算就是位级的运算操作了。
$a 《《 $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
假定变量 $a 的值是 3,$b 的值是 2。
那么 $a 在内存中的存放的格式是:
00000000 00000000 00000000 00000011
每执行一次左移,都将所有的位向左移动,右边补零,左边超过的舍弃。
所以 $a 左移 2 得到的是:
00000000 00000000 00000000 00011000
也就是 12。相当于 3 × 2 × 2 = 12。
$a 》》 $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
假定变量 $a 的值是 24,$b 的值是 2。
那么 $a 在内存中的存放的格式是:
00000000 00000000 00000000 00011000
每执行一次右移,都将所有的位向由移动,右边超过的舍弃,左边空出的位补零。
所以 $a 右移 2 得到的是:
00000000 00000000 00000000 00000110
也就是 6。相当于 24 ÷ 2 ÷ 2 = 6。
位移运算是系统底层运算,运算的速度比乘除还要快很多,优化代码优化到极致的时候,可以将数换算成二的公倍数,然后进行位移计算。但在WEB开发中几乎没有任何必要,而且超过系统底层了,程序在的可移植性就会降低。
其他的位运算符也是差不多的。比如:
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
假定变量 $a 的值是 5,$b 的值是 6。
$a:
00000000 00000000 00000000 00000101
$b:
00000000 00000000 00000000 00000110
$a & $b :
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000110
───────────────────────────
00000000 00000000 00000000 00000100
竖的看,上下都是 1 的得到 1 ,否则就是 0。
所以 $a & $b = 4。
~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。
~ $a:
00000000 00000000 00000000 00000101
───────────────────────────
11111111 11111111 11111111 11111010
如果 $a 是有符号整数,第一位是符号位,1表示负数,那么 ~ $a = -2147483642。
如果 $a 是无符号整数,第一位还是数据位,那么 ~ $a = 4294967290。
以下的就不详细介绍了:
$a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。
平常说的几位的系统,就是系统处理整数的时候,是多少个位同时计算的,上面的例子都是基于32位系统。因为移动时超过的位将被舍弃,如果是64位或12位的,位移的结果就可能不一样了,要将计算时位的数量调整下。

php中$i=$h<<$c什么意思

《《是位运算符,就是把$h这个变量的值换算成二进制与$c的值进行位运算,结果赋值给$i.
如8的二进制是1000, 8《《2,二进制不为零的向左移动两位就变成100000,转换成十进制就是32,所以8《《2=32
***隐藏网址***

PHP位运算符理解

  • 左移1位=》*2
    右移1位=》/2

  • 《《左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。例 如
    $a=10;
    $b=$a《《2;
    则$b=40,根据手册描述可以看出位运算可以看出向左移一位,则是实现乘2运算。由于位移操作的运算速度比乘法的 运算速度高很多。因此在处理数据的乘法运算的时,采用位移运算可以获得较快的速度。
    提示 将所有对2的乘法运算转换为位移运算,可提高程序的运行效率
    》》 位右移
    右移运算的实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。如果当前的数为无符号数, 高位补零。例如:
    $a = 25;//11001
    b=a》》2;//等价于:11001 》》 01100, 01100 》》 00110.那么110 =》 6,即25/4 = 6
    b=(0000 0000 0000 0110)=6
    如果当前的数据为有符号数,在进行右移的时候,根据符号位决定左边补0还是补1。
    如果符号位为0,则左 边补0;但是如果符号位为1,则根据不同的计算机系统,可能有不同的处理方式。
    可以看出位右移运算,可以实现对除数为2的整除运算。
    提示 将所有对2的整除运算转换为位移运算,可提高程序的运行效率
    1》》0 就是 1/2的0次方 1/1=1
    2》》1 就是 2/2的1次方 2/2=1
    3《《2 就是 3*2的2次方 3*4=12
    注意一点的是右位移如果不能整除的话会舍弃小数,只保留整数。3》》1的结果就是1

探索php 位运算的旅程中,php位运算的问题是一个重要的路标。希望这篇指南帮你确认了这个路标的方向。前方的路更精彩,关注我们,结伴同行!
本文编辑:admin

更多文章:


在线汉字转gbk(java怎么把UTF-8字串转成GBK字串)

在线汉字转gbk(java怎么把UTF-8字串转成GBK字串)

您是否曾想过,在线汉字转gbk究竟是怎么一回事?它与java怎么把UTF-8字串转成GBK字串之间又有什么联系?本文将为您一探究竟。

2026年4月6日 16:20

ecshop项目介绍(开发一套php多用户商城系统需要多少钱)

ecshop项目介绍(开发一套php多用户商城系统需要多少钱)

还记得第一次接触ecshop项目介绍时的茫然吗?是开发一套php多用户商城系统需要多少钱这个概念,像一盏灯照亮了后续的路。本文将为你点亮这盏灯。

2026年4月6日 16:00

carol英文名寓意是什么?carol是什么意思

carol英文名寓意是什么?carol是什么意思

正如一位名家所言:“弄懂carol英文名寓意是什么,是通往carol殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年4月6日 15:40

c登录界面代码(c语言 商品销售系统登入界面该怎么写)

c登录界面代码(c语言 商品销售系统登入界面该怎么写)

c登录界面代码的背后,隐藏着怎样的秘密?c语言 商品销售系统登入界面该怎么写又在其中扮演了何种角色?带着疑问,我们一起探秘。

2026年4月6日 15:20

随机时间公式excel(excel 时间随机函数公式)

随机时间公式excel(excel 时间随机函数公式)

很多新手在接触随机时间公式excel时,都会在excel 时间随机函数公式这个问题上徘徊良久。本文将亮起指路明灯,带你快速通关。

2026年4月6日 15:00

php 位运算(php位运算的问题)

php 位运算(php位运算的问题)

这篇文章给大家聊聊关于php 位运算,以及php位运算的问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年4月6日 14:40

网络前端需要学什么(Web前端学习什么)

网络前端需要学什么(Web前端学习什么)

是不是总觉得网络前端需要学什么的知识体系太庞大,Web前端学习什么更是无从下手?本文将帮你化繁为简,抓住核心。

2026年4月6日 14:20

字符串比大小strcmp(c语言中比较两个字符串的大小)

字符串比大小strcmp(c语言中比较两个字符串的大小)

花费5分钟阅读本文,您将获得对字符串比大小strcmp和c语言中比较两个字符串的大小的清晰认知,远超自己搜索数小时的效果。

2026年4月6日 14:00

injuries什么意思(在英语中injuries是什么意思)

injuries什么意思(在英语中injuries是什么意思)

上一篇文章我们介绍了injuries什么意思的基础,今天我们将深入其核心环节——在英语中injuries是什么意思,看看它如何承前启后。

2026年4月6日 13:40

php小程序框架(用php如何生成小程序的小程序码)

php小程序框架(用php如何生成小程序的小程序码)

很多新手在接触php小程序框架时,都会在用php如何生成小程序的小程序码这个问题上徘徊良久。本文将亮起指路明灯,带你快速通关。

2026年4月6日 13:20

最近更新

php 位运算(php位运算的问题)
2026-04-06 14:40:02 浏览:0
热门文章

繁体字转换器(繁体字转化)
2026-04-04 18:00:01 浏览:0
androidbc(bc8-android是什么手机型号)
2026-04-05 07:20:02 浏览:0
标签列表