C语言基础-运算符

本文详细介绍了C语言中的各种运算符,包括算术运算符(如加减乘除)、一元运算符(自增/自减)、关系运算符、逻辑运算符、按位运算符以及赋值运算符,同时讨论了运算符的优先级和结合性,为初学者提供了实用的编程参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运算符指定数据对象要进行的操作。

算术运算符
  • 二元运算符 【运算符操作两个操作数】
    • + 两个操作数相加
    • - 两个操作数相减
    • * 两个操作数相乘
    • / 两个操作数相除 【整数除法会截断结果中的小数部分,浮点数不会】
    • % 两个操作数相除取余数 【不能应用于float/double类型数据】
#include <stdio.h>

int main(int argc, char const *argv[])
{
	int a = 10;
	int b = 5;
	
	printf("a + b = %d\n", a + b);
	printf("a - b = %d\n", a - b);
	printf("a * b = %d\n", a * b);
	printf("a / b = %d\n", a / b);
	printf("a %% b = %d\n", a % b);
	  
	return 0;
}

运行结果:

a + b = 15
a - b = 5
a * b = 50
a / b = 2
a % b = 0
  • 一元运算符
    • ++ 自增运算符 对操作数+1
    • -- 自减运算符 对操作数-1
    • 以上两个运算符可以放在操作数前,也可放在操作数后
    • 放在操作数前表示先对操作数进行操作,然后再取值用
    • 放在操作数后表示先取值用,然后再对操作数进行操作
#include <stdio.h>

int main(int argc, char const *argv[])
{
	int a = 10;
	int b = 5;
	int c = 0;;
	
	printf("c = %d\n", c = a++); //先取a值,然后a=a+1--c=10 a = 11
	printf("a = %d \n", a);
	printf("c = %d\n", c = --b); //先对b进行-1,然后取b减完1后的值 c = 4
	printf("b = %d\n", b);
	
	return 0;
}

运行结果:

c = 10
a = 11 
c = 4
b = 4
关系运算符
  • > 判断第一个操作数是否大于第二个操作数
  • < 判断第一个操作数是否小于第二个操作数
  • >= 判断第一个操作数是否大于等于第二个操作数
  • <= 判断第一个操作数是否小于等于第二个操作数
  • == 判断两个操作数是否相等
  • != 判断第一个操作数是否和第二个操作数不相等
  • 以上运算满足条件结果为1,不满足结果为0
#include <stdio.h>

int main(int argc, char const *argv[])
{
	int a = 10;
	int b = 5;
	
	printf("a > b is %d\n", a > b);
	printf("a < b is %d\n", a < b);
	printf("a >= b is %d\n", a >= b);
	printf("a <= b is %d\n", a <= b);
	printf("a == b is %d\n", a == b);
	printf("a != b is %d\n", a != b);
	
	return 0;
}

运行结果:

a > b is 1
a < b is 0
a >= b is 1
a <= b is 0
a == b is 0
a != b is 1
逻辑运算符
  • && 逻辑与运算【两个操作数结果值都为1时,与运算结果为1;其他情况都为0】
  • || 逻辑或运算 【两个操作数结果中只要至少有一个是1,或运算的结果为1;其他情况都为0】
  • 上述两个运算符都有短路特性 【只要通过第一个操作数可以判断出最终结果,就不再计算第二个操作数了】
  • ! 逻辑非运算符 【操作数结果为1,非运算结果为0;操作数结果为0,非运算结果为1】
#include <stdio.h>

int main(int argc, char const *argv[])
{
	int a = 10;
	int b = 5;
	int c = 0;;
	
	printf("(a > b) && (a - b) is %d\n", (a > b) && (a - b));
	printf("(a < b) && (c = a - b) is %d\n", (a < b) && (c = a - b));
	printf("c = %d\n", c); //由于短短,c不会被计算,c还是为0
	printf("(a <= b) || (c = a - b) is %d\n", (a <= b) || (c = a - b));
	printf("c = %d\n", c);
	printf("!(a == b) is %d\n", !(a == b));
	
	return 0;
}

运算结果:

(a > b) && (a - b) is 1
(a < b) && (c = a - b) is 0
c = 0
(a <= b) || (c = a - b) is 1
c = 5
!(a == b) is 1
按位运算符

只能用于整型操作数【有符号或无符号的char 、int、short、long】

  • & 按位与 【两个操作数对应位都是1该位结果为1,其他为0】
  • | 按位或 【两个操作数对应位至少有一个是1该位结果为1,其他为0】
  • ^ 按位异或 【两个操作数对应位不同结果为1,其他为0】
  • << 左移 【第一个操作数的二进制数左移第二个操作数位】
  • >> 右移 【第一个操作数的二进制数右移第二个操作数位】
  • ~ 按位取反 【一元操作符,对操作数的每一位都取反】
#include <stdio.h>

int main(int argc, char const *argv[])
{
	int a = 10; // 1010
	int b = 5; // 0101
	int c = 0;
	
	printf("c = %d\n", c = a & b); // 0000-->0
	printf("a = %d \n", ~a); // 1...1111110101-->取反+1 --> 1010-->10+1--> -11
	printf("c = %d\n", c = a | b); // 1010 | 0101 -->1111
	printf("b = %d\n", b = a ^ b); // 1010 ^ 0101 --> 1111
	
	return 0;
}

运行结果:

c = 0
a = -11 
c = 15
b = 15
赋值运算符
  • = 赋值运算符 【将右侧操作数赋值给左侧的变量】
  • += 【左侧操作数=左侧操作数 + 右侧操作数】
  • -=【左侧操作数=左侧操作数 - 右侧操作数】
  • *=【左侧操作数=左侧操作数 * 右侧操作数】
  • /=【左侧操作数=左侧操作数 / 右侧操作数】
  • %=【左侧操作数=左侧操作数 % 右侧操作数】
  • &=【左侧操作数=左侧操作数 & 右侧操作数】
  • ^=【左侧操作数=左侧操作数 ^ 右侧操作数】
  • |=【左侧操作数=左侧操作数 | 右侧操作数】
  • <<=【左侧操作数=左侧操作数 << 右侧操作数】
  • >>= 【左侧操作数=左侧操作数 >> 右侧操作数】
#include <stdio.h>

int main(int argc, char const *argv[])
{
	int a = 10; // 1010
	int b = 5; // 0101
	int c = 0;
	
	printf("c = %d\n", c += a); // c = c+a = 10;
	printf("c = %d\n", c -= b); // c = c -b = 5
	printf("c = %d\n", c <<= b); // c = c << b 0101 << 5--> 010100000-->160
	
	return 0;
}

运行结果:

c = 10
c = 5
c = 160
运算符优先级

有些暂时没有提及的运算符,会在后续出现讲解。

运算符结合性
()、 []、 ->、 .从左到右
! 、~ 、++、 --、+(正号)、-(负号)、*、(type)、sizeof从右到左
*、/、%从左到右
+、-从左到右
<<、>>从左到右
<、<=、>、>=从左到右
==、!=从左到右
&从左到右
^从左到右
|从左到右
&&从左到右
||从左到右
? :从左到右
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=从右到左
,从右到左

最好还是用括号区分优先级,更易懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值