关于c++中的移位运算符

About shift operator in C++

本文关键字:运算符 c++ 关于      更新时间:2023-10-16

我正在寻找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个节点(头部有两个子节点,子节点有四个子节点)