n&(1<<i)的含义

1<<i 是将1左移i位,即第i位为1,其余位为0;

例如1<<2 则0001->0100

n&(1<<i)是将左移i位的1与n进行按位与,即为保留n的第i位,其余位置零

如果n第i位为0,则n&(1<<i)的值为0

否则不为0

常用if(n&(1<<i)==0)用于判断n的第i位是否为0
————————————————
版权声明:本文为CSDN博主「feiyu_diary」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/feiyu_diary/article/details/78802996

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构课程设计简易运算器 #include #include #include #include #include #include using namespace std; char str[50]; //用于存放原来的表达式 int top; //栈顶指针 char stack[50]; //定义栈,用于计算逆波兰式 char ex[50]; //存放后缀表达式 double _stack[50]; //定义栈,用于计算逆波兰式子 int flag[50]; //用于区分+、-号的含义,0表示运算符,1表示正负号 //生成逆波兰式 void NiBolan() { memset(flag,0,sizeof(flag)); //flag初始值设为0 char ch=str[0]; int i=1,t=0; top=0; while(ch!='#') { switch(ch) { case '(': top++; stack[top]=ch; break; case ')': while(stack[top]!='(') { ex[t]=stack[top]; top--; t++; } top--; break; case '^': while(stack[top]=='^') //设置^运算符优先级为最高 { ex[t]=stack[top]; top--; t++; } top++; stack[top]=ch; break; case '+': case '-': //当ch为+、-号是,若前面相邻字符不是')'或数字且后面相邻字符是数字时表示正负号 if(isdigit(str[i]) && !isdigit(str[i-2]) && str[i-2]!=')') { flag[t]=1; //标记符号为正负号 ex[t++]=ch; ch=str[i++]; while((ch>='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;<='9') { d=d+double(ch-'0')/(10.0*k); k=k+1.0; ch=ex[++t]; } } top++; _stack[top]=d; } ch=ex[t]; } cout<<"计算出的结果:"<<_stack[top]<<endl; //printf("计算出的结果:%lf\n",_stack[top]); } int main() { printf("输入中缀表达式:"); scanf("%s",&str;); //输入原表达式 printf("原来的表达式:%s\n",str); NiBolan(); //生成逆波兰式 Calculate(); //计算逆波兰式 return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值