#include <stdio.h>
#define wrong -1
#define uint unsigned int
static int fac=1;
int fac_value(int fac,int mov);
int main(void)
{
char addr[8],*p;
int i=0;
uint num;
printf("Input num: ");
scanf("%d%*c",&num);
printf("Where you want 1: ");
p=addr;
for(i = 0;i < 8; i++)
{
scanf("%c",p);
if(addr[i] == '\n')
{
i = 7;
}
p++;
}
*p = '\0';
p = addr;
while(*p != '\n')
{
switch(*p)
{
case '*':fac = 0;break;
case '0':fac = fac_value(fac,0);break;
case '1':fac = fac_value(fac,1);break;
case '2':fac = fac_value(fac,2);break;
case '3':fac = fac_value(fac,3);break;
case '4':fac = fac_value(fac,4);break;
case '5':fac = fac_value(fac,5);break;
case '6':fac = fac_value(fac,6);break;
case '7':fac = fac_value(fac,7);break;
default :{printf("Some bit is wrong!\n");return wrong;}
}
p++;
}
num |= fac;
printf("Last num = %d\n",num);
}
int fac_value(int fac,int mov)
{
static int time = 0;
if(time == 0)
{
fac = 1 << mov;
time ++;
}
else
fac |= 1 << mov;
return fac;
}