我需要存储一个30个字母的组合,但每个字母只能是“0”、“1”或“2”。当我使用 sizeof(myString) 时,它返回 32。
我想使用这个 30 个字母的组合来访问数组的一行,所以我想知道是否可以使用某种类型的 3 值 bool 来存储 3 个值中的 1 个。
最佳答案
3^30 = 205891132094649 (~2E14),小于 64 位整数的最大值 (~2E19),因此您可以将字符串以 1:1 的方式映射到 64 位整数。
一个明显的方法是将您的字符串视为以 3 为基数的数字,这样转换起来会很慢。将其视为基数 4 会快得多,然后可以完全通过位移(无模数除法/乘法)完成转换,这是可能的,因为 4^30 仍然小于 2^64。
关于C++ - 变量中的 3 个可能值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936165/