Php “|”字符是做什么的?
可能重复: 为了找到答案,我在谷歌上搜索了很多,但什么也找不到。 我在一些免费源代码中看到他们使用|符号来组合值或其他东西。有人能解释一下|和+之间的区别吗 样本:Php “|”字符是做什么的?,php,Php,可能重复: 为了找到答案,我在谷歌上搜索了很多,但什么也找不到。 我在一些免费源代码中看到他们使用|符号来组合值或其他东西。有人能解释一下|和+之间的区别吗 样本: <?php define('PERMISSION_DENIED', 0); define('PERMISSION_READ', 1); define('PERMISSION_ADD', 2); define('PERMISSION_UPDATE', 4); define('PERMISSION_DELETE', 8);
<?php
define('PERMISSION_DENIED', 0);
define('PERMISSION_READ', 1);
define('PERMISSION_ADD', 2);
define('PERMISSION_UPDATE', 4);
define('PERMISSION_DELETE', 8);
$read_only = PERMISSION_READ;
$read_delete = PERMISSION_READ | PERMISSION_DELETE;
$full_rights = PERMISSION_DENIED | PERMISSION_READ | PERMISSION_ADD | PERMISSION_UPDATE | PERMISSION_DELETE;
$myrights = PERMISSION_READ;
$myrights |= PERMISSION_UPDATE;
?>
为什么不只是:
<?php
define('PERMISSION_DENIED', 0);
define('PERMISSION_READ', 1);
define('PERMISSION_ADD', 2);
define('PERMISSION_UPDATE', 4);
define('PERMISSION_DELETE', 8);
$read_only = PERMISSION_READ;
$read_delete = PERMISSION_READ + PERMISSION_DELETE;
$full_rights = PERMISSION_DENIED + PERMISSION_READ + PERMISSION_ADD + PERMISSION_UPDATE + PERMISSION_DELETE;
$myrights = PERMISSION_READ;
$myrights += PERMISSION_UPDATE;
?>
|当输入中至少有一个对应位为1时,结果的每一位为1。使用加法也可以,但不能清楚地表明一个人正在组装位掩码,并且可能导致错误,因为
PERMISSION_READ + PERMISSION_READ != PERMISSION_READ
但是
它是按位or运算符,所以您使用的是以2为基数的数字表示法 例如:
$user_perms = perm1 | perm3;
if ($user_perms & perm4) echo "user does not have this permission";
1000 | 0001=1001==>8 | 1=9
在您的代码中,每个权限由位于不同位置的一位表示,我的意思是:
1=0001=perm1
2=0010=perm2
4=0100=3
8=1000=4
这样做或使用这些数字将为您提供包含所有权限的数字。然后,如果要检查是否设置了权限,则必须使用正在检查的权限执行and操作,例如:
$user_perms = perm1 | perm3;
if ($user_perms & perm4) echo "user does not have this permission";
这是一个按位OR运算符 您可以在此处找到有关它的更多信息:
按位运算符通常适用于软加密方法好的,有一点不同。要查看差异,您只需查看这些数字在二进制中的显示方式:
0 = 00000000
1 = 00000001
2 = 00000010
4 = 00000100
8 = 00001000
正如您所看到的,这些数字中的每一个都只有一个位设置为1,每个位位于不同的位置
现在,在它们之间有一个按位OR将使每个位置上有一个作为操作数的结果:
00000010 |
00000100
----------
00000110
在这种情况下,这与添加数字是一样的
0 | 0 = 0; 0 + 0 = 0
0 | 1 = 1 | 0 = 1 + 0 = 1
不同之处在于:
1 | 1 = 1
当
1 + 1 = 10 !!
本例中的不同之处在于,位运算符更快,因为您只需对位进行操作 术语“逻辑或”适用于单个二进制数字。按位是指完整的二进制值。这里没有二进制数,只有一个数字的二进制表示法,它只是以2为基数的表示法。将符号和概念混为一谈,虽然对初学者很有吸引力,但imho阻止程序员充分理解手头的概念。你是对的,请注意,这里不是每个人都说母语英语,而且解释可能重复的内容并不容易-参见