2015年07月10日 13:39
二項ビット単位演算子のオペランドが異なった長さの文字列だった場合、 | と ^ の演算子は短い側のオペランドの右側に追加のゼロが ついているとみなします。 一方 & 演算子は長い方のオペランドが短い方に切り詰められます。 この拡張や短縮の粒度はバイト単位です。
print "j p \n" ^ " a h";
JAPH
hex bin
---------------------
j 0x6a 1101010
XOR [sp] 0x20 0100000
---------------------
J 0x4a 1001010 # 大文字 J が得られる
hex bin
---------------------
[sp] 0x20 0100000
XOR a 0x61 1100001
---------------------
A 0x41 1000001 # 大文字の A が得られる
hex bin
---------------------
p 0x70 1110000
XOR [sp] 0x20 0100000
---------------------
P 0x50 1010000 # 大文字の P が得られる
hex bin
---------------------
[sp] 0x20 0100000
XOR h 0x68 1101000
---------------------
H 0x48 1001000 # 大文字の H が得られる
hex bin
--------------------
\n 0x0a 0001010
XOR [0] 0x00 0000000
--------------------
\n 0x0a 0001010 # 改行文字 ( LF ) が得られる
print "JA" | " ph\n";
jpah
hex bin
--------------------
J 0x4a 1001010
OR [sp] 0x20 0100000
--------------------
j 0x6a 1101010 # 小文字 j が得られる
hex bin
--------------------
A 0x41 1000001
OR [sp] 0x20 0100000
--------------------
a 0x61 1100001 # 小文字 a が得られる
hex bin
--------------------
[0] 0x00 0000000
OR p 0x70 1110000
--------------------
p 0x70 1110000 # 小文字 p が得られる
hex bin
--------------------
[0] 0x00 0000000
OR h 0x68 1101000
--------------------
h 0x68 1101000 # 小文字 h が得られる
hex bin
--------------------
hex bin
-------------------
[0] 0x00 0000000
OR \n 0x0a 0001010
-------------------
\n 0x0a 0001010 # 改行文字 ( LF ) が得られる
print "japh\nJunk" & '_____';
JAPH
hex bin
------------------
j 0x6a 1101010
AND - 0x5f 1011111
------------------
J 0x4a 1001010 # 大文字 J が得られる
hex bin
------------------
a 0x61 1100001
AND - 0x5f 1011111
------------------
A 0x41 1000001 # 大文字 A が得られる
hex bin
------------------
p 0x70 1110000
AND - 0x5f 1011111
------------------
P 0x50 1010000 # 大文字 P が得られる
hex bin
------------------
h 0x68 1101000
AND - 0x5f 1011111
------------------
H 0x48 1001000 # 大文字 H が得られる
hex bin
-------------------
\n 0x0a 0001010
AND - 0x5f 1011111
-------------------
\n 0x0a 0001010 # 改行文字 ( LF ) が得られる
print 'p N$' ^ " E<H\n";
hex bin
---------------------
p 0x70 1110000
XOR [sp] 0x20 0100000
---------------------
P 0x50 1010000 # 大文字 P が得られる
hex bin
---------------------
[sp] 0x20 0100000
XOR E 0x45 1000101
---------------------
e 0x65 1100101 # 小文字 e が得られる
hex bin
---------------------
N 0x4e 1001110
XOR < 0x3c 0111100
---------------------
r 0x72 1110010 # 小文字 r が得られる
hex bin
---------------------
$ 0x24 0100100
XOR H 0x48 1001000
---------------------
l 0x6c 1101100 # 小文字 l が得られる
hex bin
---------------------
[0] 0x00 0000000
XOR \n 0x0a 0001010
---------------------
\n 0x0a 0001010 # 改行文字 ( LF ) が得られる