操作符知识

目录

一.操作符的分类

1.移位操作符

2.位操作符(操作数必须是整数)

3.逗号表达式

5.优先级和结合性


一.操作符的分类

364fe103fe064653949018966d264633.jpg

算术操作符:+,–,*,/,%

移位操作符:>>,<<

结构成员访问:.,–>

其中,大部分都较为简单和基础,在之前的学习中都学习到并且在编程中都有掌握,接下来就选择几个介绍

二.关系操作符

>  <  >=  <=  ==  !=

多个关系运算符不宜连用

三.条件操作符

exp1 ? exp2 :exp3

例子1

int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d", &a);
//	if (a > 5)
//	{
//		if (a > 5)
//		{
//			b = 3;
//		}
//		else
//		{
//			b = -3;
//		}
//		printf("%d\n", b);
//		return 0;
//	}
//}

int main()
{
	int a = 0;
	scanf("%d", &a);
	int b = a > 5 ? 3 : -3;
	printf("%d\n", b);
	return 0;
}

例子2

//使用条件表达式实现两个数中的最大值
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int ret = a > b ? a : b;
	printf("%d\n", ret);
}

四.逻辑操作符

&&  | | !

!:取反(改变单个表达式的真假)

&&:与运算符,两边都是真才是真,否则是假

| |:或运算符,两边至少有一个为真就是真,否则就是假

短路

对于&&来说,如果已经确定左边的表达式是错误的,那么就不用对右边的表达式进行计算

对于| |来说,如果左边的表达式是真的,那么就不用在判断右边的表达式

五.移位操作符

(1)左移操作符<<

移动规则:左边抛弃,右边补0

 (2)右移操作符

移位规则

逻辑右移:左边用0填充,右边丢弃

算术右移:左边用原该值的符号位填充,右边丢弃

大部分算术右移是算数右移

不要移动负数位!

int main()
{
	int n = 10;
	int m = n << 1;
	printf("%d\n", n);
	printf("%d\n", m);
	return 0;
}

代码结果如下

为什么是这个结果呢?

10的二进制是1010

10 / 2 =5     0

5 / 2 = 2      1

2 / 2 = 1      0

1 / 2 =0       1

原码是00000000000000000000000000001010

左移之后是00000000000000000000000000010100,即为4+16 =20

2.位操作符(操作数必须是整数)

3e6794d5f6e94ed88c71e278e1bacb3e.jpg

计算规则:

&–对应的二进制位进行与运算,只要有0就是       0,同时为1才是1

  |–对应的二进制位进行或运算,只要有1就         是1,同时为0才是0

^–异或运算,相同为0,相异为1

~–除符号位剩下的全部取反

代码示例

int main()
{
	int num1 = -3;
	int num2 = 5;
	printf("%d\n", num1 & num2);
	printf("%d\n", num1 | num2);
	printf("%d\n", num1 ^ num2);
	printf("%d\n", ~0);
	return 0;
}

可知,-3的二进制是10000000000000000000000000001101

            5的二进制是00000000000000000000000000000101

                  &运算为00000000000000000000000000000101

                  |运算为100000000000000000000000000000011

                 ^运算为100000000000000000000000000001000

运算结果是

3.逗号表达式

从左到右依次执行。整个表达式的结果是最后一个表达式的结果

4.函数调用操作符

接受一个或多个操作数,第一个操作数是函数名,其余的操作数就是传递给函数的参数

代码举例

void test1()
{
	printf("hehe\n");
}
void test2(const char * str)
{
	printf("%s", str);
}
int main()
{
	test1();
	test2("never give up.");
	return 0;
}

函数调用部分是

void test1()
{
	printf("hehe\n");
}
void test2(const char * str)
{
	printf("%s", str);
}

此时,函数调用操作符所在的地方是

test1();
test2("never give up.");
5.优先级和结合性

4d9d18ac8e13462da171c8305a25c403.gif

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值