关于数字特征值,求解答~

为什么输入46,输出结果是3呢,不应该是2嘛
#include <stdio.h>
int main()
{int numb=0;
int weishu=1;
int x=0;
int a=0;
scanf("%d",&numb);
while(numb>0)
{
if((numb+weishu)%2==0)
{a=2^(weishu-1)
;x=x+a;}
numb=numb/10;
weishu++;
}

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

^符号在C语言中是异或运算符,求幂次方用pow函数
代码修改如下

#include <stdio.h>
#include <math.h>  //包含头文件
int main()
{
    int numb=0;
    int weishu=1;
    int x=0;
    int a=0;
    scanf("%d",&numb);
    while(numb>0)
    {
        if((numb+weishu)%2==0)
        {
            a=pow((double)2,weishu-1);//2^(weishu-1)  //这里修改成这样
            x=x+a;
        }
        numb=numb/10;
        weishu++;
    }

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

是2,代码错了吧