我不能理解这些2的快速整数幂的代码,
inline constexpr std::uint64_t pow2 (std::uint64_t i)
{
return std::uint64_t(1) << i;
}事实上,我不能理解下面的代码是如何工作的,uint64_t只是一个类型,int也可以,
return std::uint64_t(1) << i;发布于 2016-09-26 09:38:47
<<是位移位运算符,它实质上是将数字中的每1个数字乘以2。
所以1<<2 = 1*2*2
3<<5= 3*2*2*2*2*2
对于数字中的每一个1乘以2,就是将2乘以原始值。(感谢更正M.M)
发布于 2016-09-26 09:44:46
C++中的type(x)仅仅是C类型转换(type)x的一种替代。
因此,std::uint64_t(1)等同于(std::uint64_t)1,并生成一个值为1的std::uint64_t。(注:std::uint64_t为C++11或更高版本)。
对于无符号整数类型,该标准还规定,只要不发生类型溢出,左移n等同于乘以2,n倍(即乘以2的n的幂)。
对于有符号类型,不为负值定义左移位的结果。
发布于 2016-09-26 09:31:25
它只是调用unit64_t的构造函数,你通常不会看到它被用于这样的基本类型。通常,构造函数与用户定义的类一起使用,您可能会看到如下所示:
return A(1);其中A是用户定义的类。
在本例中,用std::uint64_t替换A。然后,<<将值1与2相乘i次。
https://stackoverflow.com/questions/39693509
复制相似问题