我只是在golang中对一些算法问题感兴趣。据我所知,在其他语言中按字母顺序查找下一个字符我可以对字符进行位移,因为字符(我想的是C)实际上是一个数字。
所以我尝试了
"a" >> 2
或者那种效果,但存在类型不匹配。
我想知道如何实现这一目标。
答案 0 :(得分:2)
你试图移动一个字符串,而不是一个字节,比如@Not_a_Golfer说'a'>>2
应该可以正常工作。
然而,要获得下一个角色,您可以执行以下操作:
func nextChar(ch byte) byte {
if ch += 1; ch > 'z' {
return 'a'
}
return ch
}
func main() {
fmt.Println(string(nextChar('a')))
}
答案 1 :(得分:1)
我不确定你认为这会给你“下一个角色”。任何语言都不是这样。 'a' >> 2
的作用是:
int32(97)
(example)>>
表示'将X右移Y位'。向右移2位在功能上与整数除以4相同。所以(x >> 2) == (x / 4)
。 (example)97 / 4 == 24
。 b
字符具有ASCII值98
。所以这不会让你在附近。 (example)当考虑二进制表示法中的数字时,位移是最明显的。对于表达式z = x >> y
,我们可以注意以下内容:
x(97): 01100001
y(2): 00000010
-------- >>
z(24): 00011000
请注意,x
中的所有位都只是向右移动了两位。从最后掉落的1
被删除。
同样,你可以'向左移动'(<<
)。就像x >> 1
与x / 2
相同,x << 1
与x * 2
相同。
表达式:5>>1 == 5/2 == 2
:
x(5): 00000101
y(1): 00000001
-------- >>
z(2): 00000010
表达式:5<<1 == 5*2 == 10
:
x(5): 00000101
y(1): 00000001
-------- <<
z(10): 00001010
如果您希望角色直接跟在'a'
之后,只需在其中添加1,如example中所示。