hang on while I find the relevant line of code
ok, so this is in Python. First of all I did s = map(ord,'worsts') so now s contains the ASCII codes for the letters in "worsts": [119, 111, 114, 115, 116, 115]. Then I made a little utility function: def j(codes): return ''.join(map(chr,codes)) which turns ASCII back into characters and joins them into a string. So j(s) would be "worsts" again. [... continues]
and then I asked for j(c&(c>>1) for c in s) which gave "3'0101" and for j(c&(c<<1) for c in s) which gave "fNb
b"
so for "wa" I'd get 119,97
(note that the operation I'm talking about here operates independently on separate letters)
and then the two ways of ANDing 119 give 51 (not a letter) and 102 (letter f)
because 119 in binary is 01110111 which gives 0110011 and you might choose to regard that either as 00110011 or 01100110
similarly 'a' is 01100001 and ANDing adjacent bits will give you just a single 1, in bit 5 or bit 6 depending on how you do it
if, on the other hand, what you were meaning to ask about was ANDing corresponding bits in adjacent letters (which I also tried, and which I wonder whether you might have meant because you gave a 2-letter example)
then let's actually take "popgun" whose bits are
01110000
01101111
01110000
01100111
01110101
01101110
and note that o and p (letters 15 and 16 in the alphabet) have no bits in common other than bits 5 and 6 that (kinda) indicate lowercase-letter-ness in ASCII, so when you AND them what you actually get is the backtick character
"wa" would give "a" under this operation, by the way
one version of ANDing adjacent bits I haven't tried: treat these as 5-bit symbols, run them all together, and therefore allow the low bit of one letter to get ANDed with the high bit of another. But I don't think you could have meant that because you said uppercase/lowercase is significant.