关于c++中的移位运算符
About shift operator in C++
我正在寻找c++中的大型代码库。
int capacity( ) const
{
return ( 1 << theTrees.size( ) ) - 1;
}
vector<int> theTrees
语句1 << theTrees.size( )
可能试图实现什么?假设树的大小为25个元素
如果你的问题是关于c++的:1<<
通常被认为是"2的*N*次幂"。
如果你的问题是关于数据结构理论的:高度n的二叉树每层最多有2^i节点,总共最多有2^n - 1节点。
(但你应该这样标记它)
左移n基本上是乘以2的n次方。当你有1 << n
时你只是在计算2的n次幂。例如:
1 << 0 = 1
1 << 1 = 2
1 << 2 = 4
1 << 3 = 8
等。
我怀疑theTrees.size()
返回的不是树中元素的数量,而是树的高度(层数),因为这是唯一有意义的方法。给定一棵满二叉树,节点数是2^N - 1,其中N是树的高度。例如,三层树(n = 3)可以容纳2^3 - 1 = 7个节点。检查一下:第一层有一个,第二层有两个,第三层有四个。1 + 2 + 4 = 7.
二进制表示:
1
如果我们左移一个,1 << 1
那么我们有:
10
表示十进制2
。平移<< 25
意味着我们得到:
10000000000000000000000000
:
33554432
类似于在十进制中如果左移1,则乘以10,在二进制中则乘以2。得到2^25
计算2的theTree.size()
- 1次方
我认为在这种情况下,大小实际上是级别的数量。假设你有一个平衡的二叉树,这是树中元素的数量(如果它是满的)。例如,只有头部的树有1 << 1 -1 = 1
个可能的节点,而有3个级别的完整树有1 << 3 - 1 = 7
个节点(头部有两个子节点,子节点有四个子节点)
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<