是否可以对 PHP 中的字符进行移位操作

Is it possible to do bitshift operations on a character in PHP

在这样的代码中:

<?php

$a = 'абв';

for($i = 0; $i < strlen($a); $i++)
{
        echo $a[$i]>>6, ' ';
}

输出为 0 0 0 0 0 0,这不是预期的结果。预期输出是值 3 和 2,具体取决于我们是在 UTF-8 字符的开头还是结尾。

有什么问题?

虽然 PHP 提供了许多函数,它们只是对 C 对应函数的简单包装,但开发人员已决定对位移运算符添加额外的检查。在 PHP shift-left 和 shift-right 中总是 return 0(甚至不是 false,这是有道理的)。

为了对一个字符进行位移,需要用ord函数将其包裹起来:

<?php

$a = 'абв';

for($i = 0; $i < strlen($a); $i++)
{
        echo ord($a[$i])>>6, ' ';
}

这会产生:3 2 3 2 3 2 如预期。