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

京公网安备 11010502036488号