您能否解释一下这行代码如何与下一个代码等效:
<?php
$string = chr( ( $number >> 6 ) + 192 ).chr( ( $number & 63 ) + 128 );
?>
它相当于:
if ( $number >=128 && $number <=2047 ){
$byte1 = 192 + (int)($number / 64); //= 192 + ( $number >> 6 )
$byte2 = 128 + ($number % 64); //= 128 + ( $number & 63 )
$utf = chr($byte1).chr($byte2);
}
例如输入数字 1989 都会产生 β
这些代码用于将 UNICODE 实体转换回原始 UTF-8 字符。
最佳答案
上面的代码使用二元运算符。
>>
是右移运算符。它将数字中的位向右移动(向更高有效位移动)。
所以11110000 >> 2 = 00111100
相当于除以2的幂
$number >> $n
与 $number/pow(2,$n)
相同。
&
是“按位与”运算符。它比较两个数字上的相应位,并在结果中设置两个数字中均为 1
的位。
11110000 & 01010101 = 01010000
通过将 $number
与 63 (001111111
) 相加,您将得到 $number
除以 64 的余数(也称为模数) ,写作$number % 64
。
关于php - 这是如何工作的 : chr(($number >>6 )+192). chr(($number & 63)+128);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762311/