C语言 运算符表达式

牢记:只要是表达式,就有一个计算结果。

 

运算符优先级:

1.算术运算符:  + - * / % ( ) 
  相反数运算符:-

int a = 3 + 5 * 6 * 7 / 8 % 5 + 7 - 9;

赋值语句 从左往右算的过程叫结合性 先算*/%叫优先级  
先考虑优先级在考虑结合性

取相反数:printf("%d\n", -(-a));

求余数的方法:见代码

    printf("%d......%d\n", 9 / 2, 9 % 2);
	printf("%d......%d\n", -9 / 2, -9 % 2);
	printf("%d......%d\n", 9 / -2, 9 % -2);
	printf("%d......%d\n", -9 / -2, -9 % -2);

 2.赋值类运算:

基本赋值运算符:  =

	int a = 3;
	int b, c, d, e;
	b = c = d = e = a;

从右到左算的

赋值表达式的计算结果:左侧变量的最终值

复合赋值运算符:+= -= *= /= %=

	a += 5;//相当于a = a + 5
	b += b *= 5;//不建议这么写  引起人的不适,好代码自带阅读

自增减赋值运算符:++ --

	a = b = 10;
	//++语句  不区分写法
	/*a++;
	++b;*/
	//++表达式 需要区分写法。
	//a 10 b 10 d 3 e 3
	d = a++;//分析++表达式的值 a++先给后加 
	e = ++b;//++b先加后给 谁在前谁优先
	//a 11 b 11 d 10 e 11

这里要注意,a++是先给后加,会把a本身的值给到左侧然后在自增。而++b则是先加后给,会先自增然后再把值赋给左侧。

3.关系运算

大于 >  大于等于>=  小于<  小于等于<= 

	printf("%d %d\n", 3 > 5, 3 <= 5);

	printf("%d\n", 1 <= 4 && 4 <= 10);//区间关系 不能写成1<=4<=10

等于==  不等于 !=

	printf("%d\n", 3 > 5 == 5 < 9);
	printf("%d\n", 3 > 5 != 5 < 9);

4.逻辑运算

逻辑非not ! 逻辑与and  &&  逻辑或or ||

	int a = 8;
	printf("%d\n", !!!!a);//! 计算结果:相反逻辑 0跟非0
	printf("%d\n", 1 && 2);
	printf("%d\n", 1 && 0);
	printf("%d\n", 0 && 2);
	printf("%d\n", 0 && 0);//全真则真  有假则假

	printf("%d\n", 1 || 2);
	printf("%d\n", 1 || 0);
	printf("%d\n", 0 || 2);
	printf("%d\n", 0 || 0);//全假则假 有真则真

&&全真则真,一假即假;||全假则假,一真即真

&&优先级略高于||

&& || 的短路问题:

	int m, n;
	m = 10, n = 10;
	printf("%d\n", m++ > 10 && ++n > 10);
	printf("m=%d n=%d\n", m, n);

&& ||结构优先

&&如果发现左边为假,则不会继续进行右边运算
同样,||如果发现左侧为真,则不会进行右边运算 
这种现象称为短路问题

5.三目运算符 

	int a=10;
	char r ;
	if (a%2==0)
	{
		r='T';
	}
	else
	{
		r='F';
	}
	r = a % 2 == 0 ? 'T' : 'F';

以上两段代码意义相同

6.位运算

位 运算:  站在机器角度的 二进制计算  (0 1序列)

 按位 与 & 

printf("%d %d\n", 10 & 5, 0b00001010 & 0b00000101);

变为二进制后全1则1,有0就0

 按位 或| 

printf("%d %d\n", 10 | 5, 0b00001010 | 0b00000101);

有1则1,全0则0

按位 取反~ 

printf("%u %d\n",~0,~-1);

0变1,1变0

按位 异或 ^ 

printf("%d %d\n", 10 ^ 5, 0b11111111 ^ 0b11111111);

相同则0 不同就1

加密:密文LOVE 明文JIPC 密钥 6

	char ch;
	for (int i=0;i<4;i++)
	{
		scanf_s("%c", &ch,1);
		printf("%c", ch ^ 6);
	}

 按位 左移<< 

printf("\n%d\n", 10 << 1);

二进制左移一位,实质上就是十进制乘2

 按位 右移>> 

printf("%d\n", 10 >> 2);

二进制右移一位,实质上就是十进制除以2

	printf("%d\n", -1>>100);//1111 1111 1111 1111 1111 1111 1111 1111
	
	printf("%hhd\n", (unsigned char)-1 >> 2);

-1按位右移多少位结果还是-1

右移时负数补1,非负数补0

7.其他运算符

     sizeof(表达式):

用来计算字节长度

         , 运算符:

	printf("%d\n", (1, 2, 3, 4, 5));//最右侧的表达式值 作为 逗号表达式的值。
	int a, b, c;
	a = 5, b = a++, c = 1 + b;
	int d = (a = 5, b = a++, c = a + b);
	printf("%d", d);

最右侧的表达式值 作为 逗号表达式的值。

逗号的应用场景:for循环的增量表达式

	for (int i = 0, j = 0; i < 10; i++, j++)
	{

	}

        &  取地址运算符
        * 取地址的值运算符

这两个在学习指针之后自然会明白!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员懒羊羊

多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值