按位运算结果,输出时出现奇怪的行为

时间:2011-06-19 03:36:16

标签: php bitwise-operators

看起来我的previous question更新未被注意到,因此是一个新问题。

#dump1
var_dump('two identical strings' | 'two identical strings'); # mind the |
// string(21) "two identical strings"

#dump2
var_dump('two identical strings' ^ 'two identical strings'); # mind the ^
// string(21) ""

为什么#dump2显示长度== 21,但输出无/不可见符号?

另外,当粘贴在Notepad ++中时,该字符串中没有21个符号的迹象,实际上,甚至不是1个符号,而不是来自不同字符串的不同操作的输出。 enter image description here
那些(DC3)(DC4)等未在浏览器中显示,但会显示在Notepad ++中。

哦,实际上,那个字符串中的那些黑色值是什么? 我猜这些是位级/汇编程序级别的值,但是,呵呵,guess !== true

提前致谢!

1 个答案:

答案 0 :(得分:7)

对一个字节序列进行异或运算基本上将所有位设置为0.所以你有一个长字符串的x00字节,这是NUL字符,它在屏幕上没有可读的表示。对任何类型的字符串执行按位操作通常会导致相当随机的位序列无法在屏幕上显示为可读字符。您看到的随机黑色内容是Notepad ++尽力渲染字节序列。