快速整数幂为2

时间:2016-09-26 01:27:10

标签: c++ function

我无法理解这些代码的快速整数幂为2,

using

实际上,我无法理解以下代码是如何工作的,uint64_t只是一个类型,int也没关系,

inline constexpr std::uint64_t pow2 (std::uint64_t i)
{
    return std::uint64_t(1) << i;
}

3 个答案:

答案 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)

C ++中的

type(x)只是C类型转换的替代(type)x

因此std::uint64_t(1)相当于(std::uint64_t)1并生成std::uint64_t,其值为1。 (注意:std::uint64_t是C ++ 11或更高版本。)

对于无符号整数类型,标准还指定左移n相当于乘以2n次(即乘以2到幂的幂n),只要不发生类型溢出。

对于有符号的类型,左移的结果没有为负值定义。

答案 2 :(得分:0)

它只是调用unit64_t的构造函数。您通常不会看到它与基本类型一起使用。通常构造函数与用户定义的类一起使用,人们可能会看到类似的东西:

return A(1);

其中A是用户定义的类。

在这种情况下,将A替换为std::uint64_t。然后<<将值1乘以2 i次。