c语言-操作符详解(含优先级与结合性)

这篇具有很好参考价值的文章主要介绍了c语言-操作符详解(含优先级与结合性)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


了解什么是操作数、操作符

操作数:

操作数是用于运算的数字或者表达式

如:
1 . 1+1
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
2.(a+b)*3
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

操作符

操作符,也称运算符。是对数据进行操作处理的符号。
操作符有很多,常见操作符有:单目操作符、算数操作符、移位操作符、位操作符、赋值操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构体成员。

操作符详解:

1.算术操作符: + 、- 、* 、/ 、%

+、- 、* 、/ 、% 这些算术操作符分别对应数学上的加、减、乘、除、取余数

如:

int main() {
	int a = 10, b = 4;
	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;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
注:除号 / ,因为求的结果是整数,舍掉小数点后面的数,所以10/4=2

2.移位操作符: << >>

这我在之前的文章讲过,这里放个链接需要的可以去看看哦:

3.位操作符: & | ^

这我在之前的文章讲过,这里放个链接需要的可以去看看哦:

4. 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=

赋值操作符 =

当我们要对变量初始化时或者给变量赋一个值时就可以使用(注:这不是我们数学上的等于号噢)

如:

int main() {
	int a = 10;//初始化,将10赋给a
	int b;
	b = 20;//赋值,将20赋给b
	printf("a=%d b=%d", a,b); 

	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
连续赋值:
如:

int main() {
	int a,b;
	a = b = 10;//将10赋给b,再将b赋给a
	printf("a=%d b=%d", a, b);
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
注意的是在初始化时不能进行连续赋值 如:int a = b = 10;//err
运行会报错,如:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
复合赋值
就是将原来运算的过程简化,如:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

int main() {
	int a = 10;
	int b = 20;
	a += b;//等于a+b
	printf("%d", a);
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
不仅能和 +,还能和 -、*、/等操作符一起复合使用

5. 单⽬操作符: !、++、–、&、*、+、-、~ 、sizeof、(类型)

  1. 在c语言中规定0为假,非0为真
  2. ! 逻辑取非运算符:在判断条件时使用,如:(!真 ) 那么它的结果就为假

如:

int main() {
	int a = 1;
	if (!3) {
		printf("a为0");
	}
	else
		printf("a不为0");

	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
++

++分为前置++和后置++
区别:前置++是先+1再使用,后置++是先使用后++

如:

int main() {
	int a = 2;
	int b = 2;
	printf("a=%d\n", a++);//后置++,先使用,所以这里a的值不变 打印 a=2
	printf("b=%d", ++b);//前置++,先+1,后使用,所以这里打印b=3

	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
** – **

–分为前置–和后置–
区别:前置–是先-1再使用,后置–是先使用后–

如:

int main() {
	int a = 2;
	int b = 2;
	printf("a=%d\n", a--);//后置--,先使用,所以这里打印 a=2
	printf("b=%d", --b);//前置--,先-1,后使用,所以这里打印b=1

	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
取地址操作符&
用于取变量在内存中的地址
如:

int main() {

	int a = 10;
	printf("%p", &a);//取出a的地址,%p用于打印地址
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

解引用操作符 ( * )

( * )用于指针 ,放在指针变量的前面,如:*p,*p通过指针变量p中存放的地址,找到指向的空间

如:

int main() {

	int a = 10;
	int* p = &a;
	*p = 5;//通过解引用符来找到p指向的空间,此时*p==a,改变*p即改变a
	printf("a=%d", a);
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
+、-

这个并不是算术运算符的 +、 -,而是取正负的操作符,+(正)、-(负)。

如:

int main() {

	int a = 10;
	
	printf("+a=%d\n", +a);//a不变
	printf("-a=%d\n", -a);//a等于-10
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
~按位取非

运算规则:将一个操作数全部取反(在二进制的基础上取非),不懂原码、反码、补码、进制的可以看看这个链接的内容:

如:将int a=1取反
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
sizeof()

计算变量的所占内存空间大小,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量的所占空间的大小

如:

int main() {
	int a = 10;
	int arr[10];
	printf("%d\n", sizeof(a));//变量
	printf("%d\n", sizeof(int));//类型
	printf("%d\n", sizeof(arr));//在计算数组大小时在()输入数组名即可
	return 0;
}

c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
int类型的字节大小为4字节,arr[10],为10个int型的数据所以为40

(类型)
()强制类型转换,如(int)9.8,将浮点数转化为整数
如:

int main() {
	double a = 9.8;
	printf("%d\n",(int)a);//
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
转化之后舍掉小数

6.关系操作符: > 、>= 、< 、<= 、 == 、 !=

. > 、>= 、< 、<= 、 == 、 !=,这些符号分别是大于、大于等于、小于、小于等于、等于、不等于
注意:>=、<=这两是规定的写法,不要写成=<、=>这种形式
主要用于判断表达是的真假

如:

int main() {
	int a = 0, b = 10;
	if (a<b) {//这里b大于a,表达式为真,执行下面语句
		printf("a<b");
	}
	return 0;
}

运行结构:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

7. 逻辑操作符: && 、||

逻辑与操作符 &&:

1.简单来说就是并且的意思,判断两个表达式若都为真则为真,有一个或者都为假则为假
2.有个特点就是当判断第一个表达式为假时,就不会判断后面的了,直接判断为假

c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

如:

 int main() {
	 int a = 0, b = 2;
	 if (a && b) {
		 printf("yes");
	 }
	 else
		 printf("no");
		return 0;
	}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
这里a=0,当判断a=0时,就不会去判断b了,这里直接就为假了
逻辑或操作符 ||:

1.可以简单理解为或者,判断两个表达式中有一个为真则为真,当两个表达式都为假时才判断为假
2.当判断第一个表达式为真时就不会判断后面的表达式了,直接判断为真

c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
如:

int main() {
 int a = 0, b = 2;
 if (b || a) {
	 printf("yes");
 }
 else
	 printf("no");
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
这里当判断b为真时就不会进行后面的判断了,直接判断为真

8. 条件操作符: ? :

条件操作符:

1.? : 为三目运算符
2. 格式:int c = (a > b)?a:b;//(表达式1)?(表达式2):(表达式3)
3.当表达式1为真时就会执行表达式2,当表达式1为假时就会执行表达式3

如:

int main() {
 int a = 0, b = 2;
 int c = (a > b)?a:b;//(表达式1)?(表达式2):(表达式3)
  printf("%d", c);
 return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
这里表达式1为假所以执行表达式3,将b赋给c

9. 逗号表达式: ,

逗号表达式:

1.格式:

c int d = a, b, c;//()表达式1),(表达式2),(表达式3)......,已最后一个为标准
2.逗号表达式,就是⽤逗号隔开的多个表达式。
3.逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。

如:
i

nt main() {
 int a = 0, b = 2;
 int c = 10;
 int d =(a++,b=a+b, c+b);//a++,a=1,b=a+b=3,c+b=13, d=13
 printf("%d", d);
 return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

10. 下标引⽤: []

下标引⽤:

1.格式: arr [ a ]//arr为数组名,a为下标(索引值)
2.用于找到数组具体位置的值

如:

int main() {
 int arr[] = { 1,2,3 };
 printf("%d", arr[1]);//arr[1]=2;
 return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

11. 函数调⽤: ()

函数调⽤:

1.接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。
2. add()//add(函数名)为第一个操作数,()里可以放0个或者多个操作数(参数)

如:

int add(int x, int y) {
	return x + y;
}
int main() {
	int a = 10;
	int b = 5;
	int c = add(a, b);//add,a,b都为操作数
	printf("%d", c);
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

12.结构体成员访问符

直接访问: .

格式:结构体名 . 成员名 p.a

如:

struct tag {
	int a;
	int b;
};
int main() {
	struct tag p = { 5,10 };
	printf("a=%d b=%d", p.a,p.b);
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
间接成员访问符:->

1.有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针,这时就要用到 ->
2.格式:结构体指针->成员名 p1->a

如:

struct tag {
	int a;
	int b;
};
int main() {
	struct tag  p= { 5,10 };
	struct tag* p1 = &p;
	printf("a=%d b=%d", p1->a,p1->b);
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
13.圆括号()

将括号内的看成一个整体,先算完括号内在算其他,在不确定优先级时可以用

操作符的优先级与结合性

优先级

简单来说就是先运算那一部分,和我们学的加减乘除意思差不多,在有加法和乘法的情况下,先算乘法再算加法

如:

int main() {
	int a = 10, b = 2;
	int c = b + -a * b;//这里有 -(负号)  +  * 三种运算符
	printf("c=%d" ,c);
	return 0;
}

因为 优先级 -(负号)> * >+,所以先算-a=-10,再-10 * b=-20,最后再加2,所以c=-18
运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

结合性

简单来说就是操作数与操作符之间谁和谁先在一起,分为自左向右和自右向左两个方向

如:

int c = a + b;
  • 是左向右结合:先跟a结合在与b,=赋值运算符是右向左结合,先跟(a+b)结合,再与c结合

优先级与结合性表

c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

规律:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
优先级有上到下递减

整形提升

什么是整形提升:

1.C语⾔中整型算术运算总是⾄少以缺省整型类型的精度来进⾏的。
2.为了获得这个精度,表达式中的字符和短整型操作数在使⽤之前被转换为普通整型,这种转换称为整型提升。

意义:

1.表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。因此,即使两个char类型的相加,在CPU执⾏时实际上也要先转换为CPU内整型操作数的标准⻓度。通⽤CPU(general-purpose CPU)是难以直接实现两个8⽐特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种⻓度可能⼩于int⻓度的整型值,都必须先转换为int或unsigned
int,然后才能送⼊CPU去执⾏运算。
2.通过整形计算完后会进行截断
3.有符号和无符号在一起时,有符号转为无符号计算
4.char、short,转为int计算,就算完后截断

如何提升

  1. 有符号整数提升是按照变量的数据类型的符号位来提升的
  2. ⽆符号整数提升,⾼位补0

如:

int mian() {
	char a = -1;//有符号
	unsigned char  b = -1;//无符号
	printf("a=%d\nb=%d", a, b);
	return 0;
}

char a=1
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
再如:
char a=1 ,char b=-2,计算a+b

 int main() {
	char a = 1;
   char  b = -2;
   unsigned  char c = a + b;
	printf("a+b=%d,c=%d", a+ b,c);
	return 0;
}

c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享
short也是如此,感兴趣的可以去试试

算术转换

如果某个操作符的各个操作数属于不同的类型,那么除⾮其中⼀个操作数的转换为另⼀个操作数的类型,否则操作就⽆法进⾏。下⾯的层次体系称为寻常算术转换。

long double
double
float
unsigned long int
long int
unsigned int
int

如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算
如:

int main() {
	double a = 9.8;
	int b=3;
	printf("%lf", a + b);
	return 0;
}

运行结果:
c语言-操作符详解(含优先级与结合性),c语言主要知识点,c语言,开发语言,笔记,操作符,整形提升,分享

这里打印double类型的数,所以编译器会将a转为double类型的计算

以上就是我的分享了,如果由有错误的地方,欢迎在评论区留言
最后 谢谢大家的观看!文章来源地址https://www.toymoban.com/news/detail-752471.html

到了这里,关于c语言-操作符详解(含优先级与结合性)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统实验一模拟优先级调度算法(C语言实现附带详细注释)

    文章目录 优先级调度算法介绍 两种情况 调度算法分类 优先级分类 实验内容与要求 实验步骤 调度算法总流程图  优先级调度算法流程图  实验代码 实验结果         优先级调度算法既可以用于作业调度,又可以用于进程调度。该算法中的优先级用于描述作业或者进程的

    2024年02月01日
    浏览(44)
  • C语言---操作符详解

    算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用、函数调用和结构成员。 移位操作符,移动的是二进制位。 警告:对于移位运算符,不要移动负位数,这个是标准定义的。 3.1.1、原码、反码、补码介绍 整数

    2024年02月07日
    浏览(36)
  • 【C语言】操作符----详解

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言初阶之路 👉其他专栏:数据结构探索 💻代码仓库:江池俊的代码仓库 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 操作符分类:  💨 算术操作符  💨 移位操作符  原码、反码、补码

    2024年02月14日
    浏览(34)
  • c语言---操作符(详解)

    算术操作符: + 、- 、*、/ 、% 移位操作符: 位操作符: | ^ ` 赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、= 、= 、= 、|= 、^= 单⽬操作符: !、++、–、、 、+、-、~ 、sizeof、(类型) 关系操作符: 、= 、 、= 、 == 、 != 逻辑操作符: 、|| 条件操作符: ? : 逗号表达式: , 下标引⽤: [

    2024年02月22日
    浏览(43)
  • 【C语言】操作符详解

    👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍 算术操作符 位移操作符 位操作符 赋值操作符 单目操作符 关

    2024年02月16日
    浏览(37)
  • C语言:“~”操作符详解

    ~:含义及用法举例 文章目录 前言 一、“~”是什么? 二、原码、反码及补码 1.简介 2.用法举例 ①正整数 ②负整数 ③零 三、“~”操作符 1.简介 2.用法举例 ①正整数 ②负整数 ③零 本文在简单介绍原码反码补码的基础上,介绍“~”操作符的用法。 ~:一种单目操作符,即对

    2024年02月10日
    浏览(47)
  • C语言——操作符详解

    哈喽,大家好,今天我们来学习C语言中的各中操作符。 目录 1.操作符的分类 2.算数操作符 整数的二进制表示 3.位移操作符 3.1左移操作符 3.2右移操作符 4.位操作符 5.赋值操作符 6.单目操作符 6.1 单目操作符介绍 ~ 的用法: 6.2 sizeof 和 数组 7.关系操作符 8.逻辑操作符 9. 条件操

    2024年02月05日
    浏览(44)
  • 【c语言操作符系列1】^(异或操作符)讲解和多种例题详解

    目录 一、^ 是什么(^称为异或) 二、^的规律(特点) 三、可利用^秒杀的常见例题(重点) 1、消失的数字  2、不一样的人生密码 3、交换两个数(不能创建中间变量) 4、找出只出现一个的两个数字 是一种操作符, 针对二进制异或而言的 ,两个数对应的二进制位相同,异或

    2024年02月16日
    浏览(63)
  • 【 c 语言 】赋值操作符详解

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 引言: 在C语言编程中,赋值操作符是我们日常编程中不可或缺的一部分。它不仅是初始化变量、修改

    2024年04月09日
    浏览(35)
  • C语言操作符详解(下)

    在C语言操作符详解(上)中,已经详细系统的介绍了各种操作符及其使用场景。 接下来,本文将逐步介绍编译器执行这些代码背后所做的事情、操作符优先级、结合性以及求值顺序! 表达式求值的顺序一部分是由 操作符的优先级和结合性决定。 同样,有些表达式的操作数在

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包