#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步。