我这个函数有问题,输出结果不正确

I have a problem with this function, the output results are incorrect

我正在尝试制作这样的东西:

2^1 + 2^2 + 2^3 + 2^4 + ... + 2^n

这是我的代码:

#include <iostream>

int main(){
    int n, p=0;
    std::cout<<"N: ";
    std::cin>>n;
    
    for(int i=1; i<=n; i++){
        p = p+(2^i);
    }
    std::cout<<p;

    return 0;
}

结果总是不正确。如果我输入 4,结果是 10 如果我输入 5,结果是 17 我认为问题出在 p = p+(2^i); 但我不确定。

在c++中^是位运算符,不是幂符号。您应该使用标准库中的 pow() 函数。你应该检查这个 answer.

注意每一项都是 2 的幂,可以用左移运算符表示:

for (int i = 0; i < N; ++i)
{
  p = p + (1 << i);
}

您还可以注意到,每一项都是前一项的 2 倍。
因此你也可以把它写成:

unsigned int term = 1;
unsigned int sum_of_terms = 0;
for (int i = 0; i < N; ++i)
{
    sum_of_terms += term;
    term *= 2;
}

编辑 1:异或真理 table
operator^ 是**异或运算符。它适用于位。
这是基于两位的真相table:

  X  |  Y  | X ^ Y  
------------------  
  0  |  0  |  0  
  0  |  1  |  1  
  1  |  0  |  1  
  1  |  1  |  0