【C】Operator / Expression

【C】Operator / Expression_第1张图片

系列连载

  • 【python / C / C++】

参考

  • 《C语言程序设计(第四版)谭浩强》
  • 【C语言】C语言视频教程
  • 《郝斌 C 语言自学教程》

文章目录

  • 1 运算符
    • 1.1 基本的算术运算符
  • 2 表达式

1 运算符

1.1 基本的算术运算符

【C】Operator / Expression_第2张图片
注意,+ 是右结合的
“=” 具有左结合性,结果赋值给左边,eg x = y = z 等价于 x = (y = z)

#include "stdio.h"
void main()
{
	printf("%d, %d\n", 20/7,-20/7);
	printf("%d, %d\n", 20%7,-20%7);
	printf("%f, %f\n", 20.0/7,-20.0/7);
}

output

2, -2
6, -6
2.857143, -2.857143

注意 % 不能作用在 double 上

  • 运算符的优先级
  • 运算符的结合性(左结合性—右向左,右结合性—左向右)

【C】Operator / Expression_第3张图片


运算符

算数运算符
+, -, *, /, %(取余)

【C】Operator / Expression_第4张图片

注意 10.5%3 会报错,% 左右必须为整数

关系运算符

>, >=, <, <=, !=, ==

逻辑运算符
!, &&(且), ||(获)

先来个简单的

#include

int main(void)
{
	int i = 10;
	int k = 20;
	int m;

	m = (3 > 2) && (k = 5);
	printf("k = %d, m = %d\n", k, m);

	return 0;
}

输出为

k = 5, m = 1

把 m 的赋值语句改为 m = (3 > 2) && (k = 0);

结果为

k = 0, m = 0

把 m 的赋值语句改为 m = (1 > 2) && (k = 5);

结果为

k = 20, m = 0

哈哈哈,

&& 从左到右运行,左边的表达式为假,右边的表达式不会执行,k = 5 没有运行

把 m 的赋值语句改为 m = (1 > 2) || (k = 5);

k = 5, m = 1

把 m 的赋值语句改为 m = (3 > 2) || (k = 5);

k = 20, m = 1

|| 左边表达式是真的时候,右边不执行

赋值运算符
=, +=, *=, /=, -=

一些琐碎的运算符知识

自增[或者自减]

  • 分类

    • 前自增 ++i
    • 后自增 i++
  • 异同

    • 相同:最终都是使 i 的值加1
    • 不同:前自增整体表达式的值是 i 加 1 之后的值(先加再用),后自增整体表达式的值是 i 加 1 之前的值(先用再加)
  • 为什么会出现自增

    • 代码更精炼
    • 自增的速度更快
  • 学习自增要明白的几个问题

    • 尽量屏蔽掉前自增和后自增的差别
    • 自增表达式最好不要作为一个更大的表达式的一部分来使用
      int m = i++ + ++i +i + i++
#include

int main(void)
{
	int i = 3;
	int j = 3;
	int p,q;

	p = ++i;
	q = j++;

	printf("i = %d, j = %d, p = %d, q = %d \n", i,j,p,q);
	
	return 0;
}

output

i = 4, j = 4, p = 4, q = 3

三目运算符
【C】Operator / Expression_第5张图片

逗号表达式
【C】Operator / Expression_第6张图片

#include

int main(void)
{
	int i = (3,4,5,6);

	printf("i = %d\n", i);
	
	return 0;
}

output

i = 6

再看个比较有意思的

#include

int main(void)
{
	int i;
	int j = 2;
	i = (j++,++j,j+2,j-3);

	printf("i = %d\n", i);
	
	return 0;
}

output

i = 1

j++++j 会改变 j 的值,j+2 不会

优先级别
算术>关系>逻辑>赋值

2 表达式

……
未完待续

你可能感兴趣的:(C,/,C++,c语言,算法,c++)