【C】操作符详解

简介: 今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:

今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:

1.算术操作符

2.移位操作符

3.位操作符

4.赋值操作符

5.单目操作符

6.关系操作符

7.逻辑操作符

8.逗号表达式

9.条件操作符

9.下标引用,函数调用和结构成员


接下来给大家详细介绍!


算术操作符

+ - * / %


其中加法和减法和数学中的一样,乘法在C语言中是*表示的,剩下的也和数学中是一样的。

在C语言中除法分为整数除法和小数除法,整数除法/两遍都得是整数,而小数除法/两边只要有一个小数就可以了。列如:

#include <stdio.h>
int main()
{
  printf("%d\n", 2 / 3);
  printf("%lf\n", 2 / 3.0);
  printf("%lf\n", 2.0 / 3.0);
  printf("%lf\n", 2.0 / 3);
  return 0;
}

代码运行结果:

e45ccbef730b4bdd813d9b80263d1931.png

还有一个%取余操作符,就是求余数,这个操作符需要注意的事,符号两边都必须是整数,不可以是浮点数!


移位操作符

<< 左移操作符

>> 右移操作符


移位操作符操作的是我们的二进制位,所以在这里给大家补充一个知识点,原码、反码、补码。

对于一个有符号的整数来说,二进制为的最高位为符号位。

正数的原码、反码、补码都相同。

负数的原码就是按二进制的形式写出来就行。反码就是符号位不变,剩下的按位取反,补码就等于反码加1。


左移操作符就是所有的二进制位向左移动,左边的丢弃,右边补0。

右移运算分为两种:

  1. 逻辑移位 左边用0填充,右边丢弃
  2. 算术移位 左边用原该值的符号位填充,右边丢弃


代码演示

#include <stdio.h>
int main()
{
  printf("%d\n", 5 >> 1);
  printf("%d\n", 5 << 1);
  return 0;
}

代码运行结果:

8e4ba57dec914f81bbe7e3328840f9f4.png

对于移位运算符,不要移动负数位,这个是标准未定义的。


位操作符

& 按位与

| 按位或

^ 按位异或


位操作符操作的也是二进制位。

&操作符,两个数二进制位对应的都是1才是1,只要有0就是0。

| 操作符,两个数二进制位对应的都是0才是0,只要有1就是1。

^操作符,两个数二进制位相同为0,相异为1。

代码演示:

#include <stdio.h>
int main()
{
  printf("%d\n", 1 & 2);
  printf("%d\n", 1 | 2);
  printf("%d\n", 1 ^ 2);
  printf("%d\n", 1 ^ 2 ^ 1);
  printf("%d\n", 1 ^ 1 ^ 2);
  return 0;
}

运行结果

c5cd9022a9174b54be4e2e0159851074.png

从运行结果我们也可以看出,^操作符满足交换律。


赋值操作符(=)

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。


复合赋值操作符

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=


这些运算符都可以写成复合的效果。

例如a+=b就等价于a=a+b。


单目操作符

! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

– 前置、后置–

++ 前置、后置++*

* 间接访问操作符(解引用操作符)

(类型) 强制类型转换


sizeof(数组名)计算的是整个数组所占空间的大小

这里重点讲一下前置++和后置++,–跟它同理。

前置++,变量先加1在使用。

后置++,先使用变量的值,在加1。

解引用操作符可以拿到指针指向的那个内容。


关系操作符

>

>=

<

<=

!= 用于测试“不相等”

== 用于测试“相等


这些关系运算符比较简单,没什么可讲的。


逻辑操作符

&& 逻辑与

|| 逻辑或


&&两边都为真才为真,否则为假,如果左边为假,右边就不进行运算了。

|| 两边都为假才为假,都则为真,如果左边为真,右边就不进行运算了。


逗号表达式

exp1, exp2, exp3, …expN


逗号表达式,会从左向右依次计算,最后一个表达式的值为最终表达式的值。

代码演示

#include <stdio.h>
int main()
{
  int num = 0;
  num = (3 + 2, 2 + 4, 5 + 5);
  printf("%d\n", num);
  return 0;
}

运行结果

1d0ef69d06d8477585b9ddcd288ba715.png


条件操作符

exp1 ? exp2 : exp3


这个操作符,如果exp1为真,就运算exp2为最终结果,否则exp3为最终结果。

比如我们求两个数最大值:


max = (a > b ? a : b);


下标引用,函数调用和结构成员

1.[ ] 下标引用操作符

操作数:一个数组名 + 一个索引值

2.( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

3.访问一个结构的成员

. 结构体.成员名。

-> 结构体指针->成员名。


操作符的优先级

28dc74aa784a4c61aeff2b3259a3b848.png

今天的分享就到这里结束了,感谢大家的关注和支持。

相关文章
|
9月前
|
存储 C++
C/C++中位操作符(&,|,^,~)的详解使用
C/C++中位操作符(&,|,^,~)的详解使用
|
7月前
|
SQL 数据库
IN 操作符
【7月更文挑战第15天】IN 操作符。
52 4
|
9月前
|
存储 编译器
操作符详解1(一)
本文介绍了编程中的操作符分类和位操作,包括算术操作符(如 +, -, *, /, %)、移位操作符(<<, >>)、位操作符(&, |, ^)、赋值操作符、单目操作符、关系操作符、逻辑操作符和条件操作符。还讨论了原码、反码和补码的概念,以及左移(<<)和右移(>>)操作符的工作原理,包括逻辑右移和算术右移的区别。最后提到了位操作符按位与(&)、按位或(|)、按位异或(^)和按位取反(~)的运算规则。
79 1
|
8月前
|
编译器 Linux C语言
操作符详解(2)
操作符详解(2)
63 0
|
8月前
|
索引
操作符,详细讲解
操作符,详细讲解
|
9月前
|
编译器 C语言 C++
操作符详解2(二)
本文介绍了编程中的操作符转换和表达式解析规则。当操作数类型不同时,会进行寻常算术转换,按照long double、double、float等类型顺序进行向上转换。表达式求值时,虽然操作符有优先级,但不能决定操作数的求值顺序,例如`a*b + c*d + e+f`中乘法先于加法,但具体计算顺序不确定,可能导致不同结果。同样,如`c++ + c--`这样的表达式也是有歧义的,因为++和--的左右结合性不能确定操作数的获取顺序。文章强调,复杂的表达式可能因编译器差异产生不同结果,应避免使用可能导致非唯一计算路径的表达式以减少潜在风险。
67 0
|
存储
操作符详解上(非常详细)
操作符详解上(非常详细)
95 1
|
存储 编译器
操作符详解(1)
操作符详解(1)
54 0
|
Linux C++ 索引
操作符详解(二)
操作符详解(二)
106 0