C语言-常用运算符详解

203 阅读5分钟

对于最基础的"hello,world"就不做详细讲解了,今天来聊一下运算符。 运算符是一种告诉编译器执行特定的数字或者逻辑操作的符号,简单来说就是机器有自己的语言,你用的运算符可以 让他进行计算。

运算符分类:

  • 算数运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符

算术运算符:

简单的算数运算符就是'+' '-' '*' '/', 除法这里有一点需要注意,'/' 是取商 '%' 是取余

/分子除以分母(分母不能为0,如果a、b皆为整数则得到商)
%取模运算符,整除后的余数

++整数值增加1
--整数值减少1

#include <stdio.h>
int main() {
int a = 10;
int b = 20 ;
int c;
c = a + b ;
printf ( "%d ",c);
c = a - b ;
printf ("%d ",c);
c = a * b;
printf ( "%d ",c);
c = a / b ;
printf ( "%d ",c);
c = a % b ;
printf ( "%d ",c);
c = a++;
printf ( "%d ",c);
c = a—-;
printf ("%d ", c);
return 0 ;
}

输出结果:30,-10,200,0,10,10,11

a++与++a的区别

a++先赋值后运算

#include <stdio.h>
int main () {
int a = 10;
int c;
c = a++;
printf("%d", c);
printf("%d", a);
a = 10;
c = a--;
printf("%d", c);
printf("%d", a);
return 0;

++a先运算后赋值

#include <stdio.h>
int main () {
int a = 10;
int c;
c = ++a;
printf("%d", c);
printf("%d", a);
a = 10;
c = --a;
printf("%d", c);
printf("%d", a);
return 0;
}

++a相当于a=a+1,a++相当于a+1

a+1不会改变a的值,a=a+1会改变a的值

比较运算符:

==两数值是否相等,相等为真
!=两数值是否相等,不等为真
'>'左值是否大于右值,是则为真
------
<左值是否小于右值,是则为真
>=左值是否大于等于右值,是则为真
<=左值是否小于等于右值,是则为真
#include <stdio.h>
int main() {
	int a = 10;
	int b = 20;
	printf("%d ", a, b);
	printf("%d ", a != b);
	printf("%d ", a > b);
	printf("%d ", a < b);
	printf(" %d ", a >= b);
	printf("%d ", a <= b);
	return 0;
}

输出结果:0,1,0,1,0,1

逻辑运算符:

&&逻辑与:当且仅当两个操作数都为真时,逻辑与运算符返回真(true)。否则,返回假(false)。
"ll"逻辑或:当两个操作数中至少有一个为真时,逻辑或运算符返回真(true)。否则,返回假(false)。
逻辑非:将操作数的逻辑值取反。如果操作数为真,则逻辑非运算符返回假(false),如果操作数为假,则返回真(true)。
#include <stdio.h>
int main() {
	int a = 1; int b = 0;
	printf("%d ", a && b); 
	printf("%d ", a || b);
	printf("%d ",!(a && b)); 
	return 0;
        }

输出结果:0,1,1

位运算符

假设A = 60,B=13,以二进制表示

A= 0011 1100

B= 0000 1101

按位与 &(只要有0则为0)

A= 0011 1100 & B= 0000 1101 =0000 1100

按位或 |(有1则为1)

A= 0011 1100 | B= 0000 1101 =0011 1101

按位异或(相同为0不同为1)

A= 0011 1100 ^ B= 0000 1101 =0011 0001

按位取反 (0变1,1变0)

~ A= 0011 1100 =1100 0011

赋值运算符

以下是常见的赋值运算符以及它们的介绍:

  1. 等号(=):将右侧的值赋给左侧的变量。

例如:

int x;
x = 5;

在上面的代码中,将值5赋给变量x。

  1. 加等于(+=):将右侧的值加到左侧的变量中,并将结果赋给左侧的变量。

例如:

int x = 5;
x += 3; // 等价于 x = x + 3;

在上面的代码中,将变量x的值加3,并将结果赋给变量x。

  1. 减等于(-=):将右侧的值从左侧的变量中减去,并将结果赋给左侧的变量。
int x = 5;
x -= 3; // 等价于 x = x - 3;

在上面的代码中,将变量x的值减3,并将结果赋给变量x。

  1. 乘等于(*=):将右侧的值乘到左侧的变量中,并将结果赋给左侧的变量。
int x = 5;
x *= 3; // 等价于 x = x * 3;

在上面的代码中,将变量x的值乘3,并将结果赋给变量x。

  1. 除等于(/=):将左侧的变量除以右侧的值,并将结果赋给左侧的变量。
int x = 15;
x /= 3; // 等价于 x = x / 3;

在上面的代码中,将变量x的值除以3,并将结果赋给变量x。

  1. 模等于(%=):将左侧的变量对右侧的值取模,并将结果赋给左侧的变量。
int x = 15;
x %= 4; // 等价于 x = x % 4;

在上面的代码中,将变量x的值对4取模,并将结果赋给变量x。

需要注意的是,赋值运算符的左侧必须是一个变量,不能是常量或表达式。同时,赋值运算符通常与其他运算符组合使用,形成复合赋值运算符,它们的作用与普通赋值运算符相同,但更简洁、更易读。

运算符优先级

以下是常见的运算符优先级,按照从高到低的顺序列出:

请注意,有些编程语言可能具有不同的运算符优先级规则,因此请在使用时查看相应的文档。

  1. 括号 (),用于改变运算符的优先级顺序。
  2. 单目运算符,例如递增/递减运算符(++,--)和取反运算符(!)。
  3. 算术运算符,包括乘法(*)、除法(/)、取模(%)、加法(+)和减法(-),它们的优先级相同,按照从左到右的顺序结合。
  4. 移位运算符,包括左移运算符(<<)和右移运算符(>>),它们的优先级相同,按照从左到右的顺序结合。
  5. 关系运算符,包括小于(<)、大于(>)、小于等于(<=)、大于等于(>=)和等于(==)、不等于(!=),它们的优先级相同,按照从左到右的顺序结合。
  6. 位运算符,包括按位与(&)、按位或(|)、按位异或(^),它们的优先级相同,按照从左到右的顺序结合。
  7. 逻辑运算符,包括逻辑与(&&)和逻辑或(||),它们的优先级相同,按照从左到右的顺序结合。
  8. 条件运算符,也称为三元运算符,包括条件判断符(?)和冒号(:),按照从右到左的顺序结合。
  9. 赋值运算符,例如等号(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)等,它们的优先级相同,按照从右到左的顺序结合。