如何在恒定时间 (O(1)) 内获取字母表 (1-26) 中字符的数值/位置,而不使用任何内置方法或函数,也不关心字符的大小写?
最佳答案
如果您的编译器支持二进制文字,您可以使用
int value = 0b00011111 & character;
如果没有,您可以使用 31 代替 0b00011111,因为它们是等效的。
int value = 31 & character;
或者如果您想使用十六进制
int value = 0x1F & character;
或八进制
int value = 037 & character;
您可以使用任何方式来表示值 31。
这是有效的,因为在 ASCII 中,小写值以 011 为前缀,大写值以 010 为前缀,然后是 1-26 的二进制等价物。 通过使用位掩码 00011111 和 AND 操作数,我们将 3 个最高有效位转换为零。这样我们就得到了 00001 到 11010、1 到 26。
关于java - 如何在不使用任何内置方法或函数的情况下在恒定时间 (O(1)) 内获取字母表 (1-26) 中字符的数值/位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31284070/