首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >2的快速整数幂

2的快速整数幂
EN

Stack Overflow用户
提问于 2016-09-26 09:27:10
回答 3查看 3.1K关注 0票数 0

我不能理解这些2的快速整数幂的代码,

代码语言:javascript
运行
复制
inline constexpr std::uint64_t pow2 (std::uint64_t i)
{
    return std::uint64_t(1) << i;
}

事实上,我不能理解下面的代码是如何工作的,uint64_t只是一个类型,int也可以,

代码语言:javascript
运行
复制
return std::uint64_t(1) << i;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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)

票数 2
EN

Stack Overflow用户

发布于 2016-09-26 09:44:46

C++中的type(x)仅仅是C类型转换(type)x的一种替代。

因此,std::uint64_t(1)等同于(std::uint64_t)1,并生成一个值为1std::uint64_t。(注:std::uint64_t为C++11或更高版本)。

对于无符号整数类型,该标准还规定,只要不发生类型溢出,左移n等同于乘以2n倍(即乘以2n的幂)。

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

票数 3
EN

Stack Overflow用户

发布于 2016-09-26 09:31:25

它只是调用unit64_t的构造函数,你通常不会看到它被用于这样的基本类型。通常,构造函数与用户定义的类一起使用,您可能会看到如下所示:

代码语言:javascript
运行
复制
return A(1);

其中A是用户定义的类。

在本例中,用std::uint64_t替换A。然后,<<将值12相乘i次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39693509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档