我无法理解这些代码的快速整数幂为2,
using
实际上,我无法理解以下代码是如何工作的,uint64_t只是一个类型,int也没关系,
inline constexpr std::uint64_t pow2 (std::uint64_t i)
{
return std::uint64_t(1) << i;
}
答案 0 :(得分:2)
&lt;&lt;是位移运算符,它在数字中每1乘以一个数字。
所以1 <&lt; 2 = 1 * 2 * 2
3 <&lt; 5 = 3 * 2 * 2 * 2 * 2 * 2
对于数字中的每1乘以2,只需将2增加到幂并乘以原始值。 (感谢修正M.M)
答案 1 :(得分:2)
type(x)
只是C类型转换的替代(type)x
。
因此std::uint64_t(1)
相当于(std::uint64_t)1
并生成std::uint64_t
,其值为1
。 (注意:std::uint64_t
是C ++ 11或更高版本。)
对于无符号整数类型,标准还指定左移n
相当于乘以2
,n
次(即乘以2
到幂的幂n
),只要不发生类型溢出。
对于有符号的类型,左移的结果没有为负值定义。
答案 2 :(得分:0)
它只是调用unit64_t的构造函数。您通常不会看到它与基本类型一起使用。通常构造函数与用户定义的类一起使用,人们可能会看到类似的东西:
return A(1);
其中A是用户定义的类。
在这种情况下,将A
替换为std::uint64_t
。然后<<
将值1
乘以2
i
次。