PHP位运算符异常问题求助:预期与实际输出不符
PHP位运算符测试异常问题解答
问题根源在于你混淆了字节字符串和二进制数值的概念:
b'11111111'是PHP的二进制安全字符串,表示包含8个ASCII字符'1'的字符串,每个字符的ASCII码为0x31(十进制49)。- 当字符串与整数进行位运算时,PHP会将纯数字字符串转换为十进制整数,这里
b'11111111'会被转为11111111,它的二进制是10101001100010110001111,其中第3、4、5位为0,这就是你得到异常输出的原因。
解决方案
要表示二进制值11111111(即十进制255),可以使用以下任意一种写法:
- 二进制字面量:
$foon = 0b11111111; - 十进制数值:
$foon = 255; - 十六进制数值:
$foon = 0xff;
修改后的代码示例
<?php $foon = 0b11111111; for ($i = 0; $i <= 7 ; $i++) { $foo = (($foon & (1 << $i)) > 0) ? 1 : 0; echo "bit " . $i . " of target is " . $foo . "<br />" . PHP_EOL; }
运行上述代码后,会输出你预期的全1结果。
内容的提问来源于stack exchange,提问作者fat penguin
相关产品推荐
相关产品推荐

