#include <stdio.h>

int main() {
    
    int n=0;
    int consult=2;

    scanf("%d",&n);
    if(n>0)
    {
        consult<<=n-1;  //非0次方,左移n-1个二进制位
    }
    else 
    {
        consult>>=1;    //0次方,右移1个二进制位,变成1
    }

    printf("%d",consult);
    return 0;
}

首先理解,移位操作符<<和>>是按二进制位移动。整数在电脑里面以补码形式存储,正整数的补码与原码相同,原码就是二进制形式。2为正整数,二进制为000000000000000000000000000000010,2的2次方为4,二进制为000000000000000000000000000000100,二者的差异是其中的“1”向左移了1步,左移操作符遵循“左边丢弃,右边补0”的运算法则。右移位操作符有两个算法,请查阅相关信息了解。

那么,当输入n次方的值为2次方时,实际上移位了2-1步,也就是n-1步。