位运算符之---按位或运算符(简单易懂)

前言:

位运算符是用来对二进制位进行操作的
c语言中有6种位运算符:
& 按位与 [链接]: https://blog.csdn.net/weixin_42837024/article/details/98736834
| 按位或 [链接]:https://blog.csdn.net/weixin_42837024/article/details/98745019
^ 按位异或 [链接]:https://blog.csdn.net/weixin_42837024/article/details/98745896
~ 取反 [链接]:https://blog.csdn.net/weixin_42837024/article/details/98748472
<< 左移 [链接]:https://blog.csdn.net/weixin_42837024/article/details/98734787
>> 右移 [链接]:https://blog.csdn.net/weixin_42837024/article/details/98734787

本篇讲 按位或| 运算符

按位或运算符“|”是双目运算符。
其功能是参与运算的两数各对应的二进位相或。
只要对应的二个二进位有一个为1时,结果位就为1

首先把数转换为2进制
比如:
10 二进制为:1010
11 二进制为:1011

1   0   1   0
1   0    1   1 
-------------------
1    0   1    1 

只要对应的二个二进位有一个为1时,结果位就为1

在这里插入图片描述

code:

int main()
{




	auto i1 = 10;		//2进制:1010 , 10进制:10
	auto i2 = 20;		//2进制:10100 , 10进制:20

	std::cout << (i1 | i2) << std::endl; //2进制11110 10进制:30

	/*				步骤: 当有一个为1时,就为1
								1 0 1 0
							  1 0 1 0 0
							  ---------
							  1	1 1 1 0
	*/

	auto i3 = 11;

	std::cout << (i1 | i3);			  //2进制:1011 10进制:11

	/*				步骤: 当有一个为1时,就为1
								1 0 1 0
								1 0 1 1
							  ---------
								1 0 1 1
	*/

}

比较通俗易懂了

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以采用递归下降法对输入的表达式进行语法分析和计算。具体做法如下: 1. 定义一个函数 `expr()`,表示对表达式的求值。 2. 在 `expr()` 函数内部,首先读入当前字符,若当前字符为负号,则将其与后面的数字拼接起来,形成一个负数。 3. 读入下一个数字,并将其存储为当前结果。 4. 读入下一个操作符,若为加减,则继续读入下一个数字,进行加减操作。若为乘除,则继续读入下一个数字,进行乘除操作。 5. 若当前操作符为左括号,则递归调用 `expr()` 函数,求出括号内的表达式的值。若当前操作符为右括号,则返回当前结果。 6. 重复步骤 3 ~ 5,直到读完整个表达式。 7. 最后返回当前结果即可。 下面是一个简单的示例代码: ```c #include <stdio.h> int get_num(char *s, int *p) { int num = 0, flag = 1; if (s[*p] == '-') { flag = -1; (*p)++; } while (s[*p] >= '0' && s[*p] <= '9') { num = num * 10 + s[*p] - '0'; (*p)++; } return num * flag; } int expr(char *s, int *p) { int res = get_num(s, p); while (s[*p] != '\0' && s[*p] != ')') { char op = s[(*p)++]; if (op == '+') res += get_num(s, p); else if (op == '-') res -= get_num(s, p); else if (op == '*') res *= get_num(s, p); else if (op == '/') res /= get_num(s, p); else if (op == '(') res = expr(s, p); } return res; } int main() { char s[100]; printf("请输入表达式:"); scanf("%s", s); int p = 0; int ans = expr(s, &p); printf("表达式的值为:%d\n", ans); return 0; } ``` 注意,这个方法虽然没有用到栈,但是使用了递归调用函数,也需要考虑函数调用栈的压栈和弹栈问题。在输入的表达式比较复杂时,可能会导致栈溢出,因此在实际使用时需要注意。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值