【C语言】运算符

目录

一、概念

二、种类

2.1 算术运算符

2.1.1 加(+)、减(-)、乘(*)、除(/)、模除(%)

 2.1.2 自增(++)、自减(--)

2.2 关系运算符

2.3 逻辑运算符

2.3.1包括 与(&&)、或(||)、非(!)三种。

2.3.2 逻辑运算符的短路原则:

2.4 位操作运算符

2.5 赋值运算符

2.6 条件运算符

2.7 逗号运算符

2.8 指针运算符

2.9 求字节数运算符

2.10 特殊运算符

三、 运算符优先级


一、概念

        运算符是告诉程序执行特定的算术或逻辑操作的符号,运算符会连接多个表达式,所谓的表达式就是由运算符、运算量和标点符号等组成的有效的序列,是用来说明一个运算的过程的。

二、种类

2.1 算术运算符

        用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模除运算,%)、自增(++)、自减(--)共七种。

2.1.1 加(+)、减(-)、乘(*)、除(/)、模除(%)

        比较简单,跟常用的数学算术运算没有区别;

#include <stdio.h>

int main()
{
	int m = 10;
	int n = 20;
	printf("m + n = %d\n", m+n);
	printf("m - n = %d\n", m-n);
	printf("m * n = %d\n", m*n);
	printf("m / n = %f\n", (float)m/(float)n);//强转
	printf("m %% n = %d\n", m%n);//输出% 需要使用  %%

    return 0;
}

执行结果:

  

 2.1.2 自增(++)、自减(--)

        a++ / ++a 算术结果等同于 a = a+1;

        a-- / --a 算术结果等同于 a = a -1 ;

        注意:前缀的自增自减和后缀的自增自减是不一样的,使用时需要注意。

#include <stdio.h>

int main()
{
	int a = 10;
	int b = a++;
	printf("a = %d  b = %d\n", a, b);

	int x = 10;
	int y = ++x;
	printf("x = %d  y = %d\n", x, y);

	return 0;
}

        运行结果:

        ① a = 10; b = a++;实现逻辑:第一步在空间中临时放置a 的值10,假设此空间名字为temp;第二步执行a = a+1;第三步将temp的值赋值给b。

        ②x = 10; y = ++x;实现逻辑: 第一步执行x = x+1; 第二步将x的值赋值给y。

2.2 关系运算符

        用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。   

        注意:关系运算符的判断相等是两个等号,一个等号是赋值运算符,关系运算符表达式的结果是一个 bool 类型,0 表示假 非0表示真。

#include <stdio.h>

int main()
{
	int m = 20;
	int n = 10;

	if(m >= n){
		printf("m >= n\n");
	}else{
		printf("m < n\n");
	}
	//其他的关系运算符用法 同理

	return 0;
}

2.3 逻辑运算符

2.3.1包括 与(&&)、或(||)、非(!)三种。

        逻辑运算符使用来连接由多个关系运算符组成的表达式的,逻辑运算符的表达式的结果也是 bool 类型。

#include <stdio.h>

int main()
{
	int m = 20;
	int n = 10;

	if(m>0 && n>0){
		printf("yes\n");
	}else{
		printf("no\n");
	}

    return 0;
}

2.3.2 逻辑运算符的短路原则:

        逻辑与:逻辑与连接的多个表达式,遇到某个表达式为假,后面的表达式就都不执行了,因为这个假足以判断整个表达式为假。

        逻辑或:逻辑或连接的多个表达式,遇到某个表达式为真,后面的表达式就都不执行了,因为这个真足以判断整个表达式为真。

#include <stdio.h>

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	//因为 b<0 为假, 所以 ++c 不再执行了
	if(++a && b<0 && ++c){
		printf("yes\n");
	}else{
		printf("no\n");
	}
	printf("a = %d  b = %d  c = %d\n", a, b, c);//11 20 30

	a = 10;
	b = 20;
	c = 30;
	//由于 ++b 为真 所以 ++c 不再执行了
	if(a<0 || ++b || ++c){
		printf("yes\n");
	}else{
		printf("no\n");
	}
	printf("a = %d  b = %d  c = %d\n", a, b, c);//10 21 30

	return 0;
}

        上述代码执行结果:

 

 2.4 位操作运算符

        参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

        一般位运算都是无符号数参与运算,如果用有符号数,会涉及原码反码补码转换的问题。

        & 按位与 :按位运算 全1为1 有0为0

        | 按位或 :按位运算 有1为1 全0为0

        ^ 按位异或 :按位运算 不同为1 相同为0

        ~ 按位取反 :按位运算 1变0 0变1

       << 按位左移:整个数据向左移动 高位舍弃 低位补0

        >> 按位右移 :整个数据向右移动 高位补0 舍弃低位

#include <stdio.h>

int main()
{
	unsigned char a = 20;
	unsigned char b = 33;
	unsigned char c = 0;

	//按位与  全1为1 有0为0
	//a:0001 0100
	//b:0010 0001
	//&
	//c:0000 0000
	c = a&b;
	printf("a&b = %#x\n", c);//0x00
	
	//按位或 有1为1  全0为0
	//a:0001 0100
	//b:0010 0001
	//|
	//c:0011 0101
	c = a|b;
	printf("a|b = %#x\n", c);//0x35

	//按位异或 相同为0,不同为1
	//a:0001 0100
	//b:0010 0001
	//^
	//c:0011 0101
	c = a^b;
	printf("a^b = %#x\n", c);//0x35

	//按位取反
	//a:0001 0100
	//~
	//c:1110 1011
	c = ~a;
	printf("~a = %#x\n", c);//0xEB

	//按位左移
	//a:0001 0100
	// <<2
	//c:0101 0000
	c = a<<2;
	printf("a<<2 = %#x\n", c);//0x50
	
	//按位右移
	//a:0001 0100
	// >>2
	//c:0000 0101
	c = a>>2;
	printf("a>>2 = %#x\n", c);//0x05

	return 0;
}

2.5 赋值运算符

        用于赋值运算,分为简单赋值(=)、复合算术赋值(+= , -= , *= , /= , %=)和复合位运算赋值(&= , |= , ^= , >>= , <<= )三类共十一种。

        注意:

                1.一个等号是赋值 两个等号是关系运算符判断相等

                2. 左=右, 将右边的值赋值给左边

                3.常量不允许放在等号的左边

2.6 条件运算符

        这是一个三目运算符,用于条件求值(?:)。

        格式:表达式1?表达式2:表达式3;

        执行顺序:先执行表达式1,如果1的值为真则执行表达式2,否则执行表达式3;

#include <stdio.h>

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	int d = 0;

	d = ++a?++b:++c;
	printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);

	return 0;
}

执行结果:

 2.7 逗号运算符

        用于把若干表达式组合成一个表达式(,)。

        格式:(表达式1, 表达式2, ..,表达式n)

        执行逻辑:从左到右依次执行,每个表达式都会参与运算,最后一个表达式的结果,就是整个逗号运算符表达式的结果。

2.8 指针运算符

        用于取内容(*)和取地址(&)二种运算。

        本文不再详细描述,后续指针章节再聊。

2.9 求字节数运算符

        用于计算数据类型所占的字节数(sizeof)。

        注意:sizeof()用法非常像函数调用,但是sizeof为运算符。

#include <stdio.h>

int main()
{
	char a;
	short b;
	int c;
	
	printf("sizeof(char) = %ld, sizeof(a) = %ld\n", sizeof(char), sizeof(a));
	printf("sizeof(short) = %ld, sizeof(b) = %ld\n", sizeof(short), sizeof(b));
	printf("sizeof(int) = %ld, sizeof(c) = %ld\n", sizeof(int), sizeof(c));

	return 0;
}

上述代码执行结果:

  

2.10 特殊运算符

        有括号(),下标[],成员(→,.)等几种。

三、 运算符优先级

        单算移关与,异或逻条赋

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值