操作符详解

1.算术操作符

+      -         *         /         %

1.1加(+)减(-)

+ 和 - ⽤来完成加法和减法。 + 和 - 都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双⽬操作符

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

1.2  * 

*用来完成乘法操作

#include <stdio.h>
int main()
{
 int num = 5;
 printf("%d\n", num * num); // 输出 25
 return 0;
}

1.3  / 

/用来完成除法操作

#include <stdio.h>
int main()
{
 float x = 6 / 4;
 int y = 6 / 4;
 printf("%f\n", x); // 输出 1.000000
 printf("%d\n", y); // 输出 1
 return 0;
}

上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是 1.5 。原因就在于 C 语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。 如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。

1.4   %

取模运算

//运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。
#include <stdio.h>
int main()
{
 int x = 6 % 4; // 2
 return 0;
}

对于负数求模的规则是:符号由第一个运算数的符号决定 

2.移位操作符

<<左移操作符

>>右移操作符

注:移位操作符的操作数只能是整数

2.1左移操作符

移位规则:左边抛弃,右边补0

需要注意的是此时num左移之后得到了20,但是num本身的值并没有改变

2.2右移操作符

移位规则:

2.2.1逻辑右移:左边用0填充,右边抛弃

2.2.2算术右移:左边用原符号位数字填充,右边抛弃

对于移位运算符只能移动正数个操作位 

3.位操作符

3.1 按位与   &

两个数的每一个二进制位进行按位与,负数则以补码的形式进行按位与

规则:0&0=0   0&1=0  1&1=1

记忆:都为1才是1

#include<stdio.h>
int main()
{
   int num1 = -3;
   int num2 = 4 ; 
   printf("%d",num1&num2);
   return 0;
}

 

3.2按位或 | 

规则:0|0=0   0|1=1     1|1=1

记忆:有1就是1

3.3按位异或^

规则:0^0=0 0^1=1 1^1=0  1^0=1

记忆:相同为0 ,不同为1

异或^满足几个规律

1)a^a=0  

2)  a^0=a

3)  a^b=b^a

4)  a^b^c=(a^b)^c=a^(b^c)

5)  a^b^a=b

了解^的性质之后做一个练习题:

在不创建第三个变量的情况下交换两个数的值

这道题主要就是考察异或的运用,和思维的发散,以及对深层原理的理解程度

#include<stido.h>
int main()
{
	int a = 10, b = 21;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d b=%d\n", a, b);
	return 0;
}

4.赋值操作符:=和复合赋值

4.1赋值

在变量进行创建的时候给一个初始值叫做初始化,在变量创建好之后,再给一个值,这叫赋值

int a=0;//初始化
a=10;//赋值

4.2连续赋值:

b=b+a   等价于b+=a

类似的b=b-a   等价于b-=a

5.单目操作符

何为单目操作符?顾名思义,就是使用时只需要一个变量就可以实现的操作符(操作数为1),而不是像+ - * /这种运算操作一样必须要有两个数才能实现运算。那么单目操作符有哪些呢?

  1. !             逻辑反操作
  2. -             负值
  3. +            正值
  4. &            取地址
  5. sizeof     操作数的类型长度(以字节为单位)
  6. ~            对一个数的二进制按位取反
  7. --            前置、后置--
  8. ++          前置、后置++
  9. *             间接访问操作符(解引用操作符)
  10. (类型)     强制类型转换

!是逻辑取反,例如:int a=10;b = !a; 此时的b就是0。因为a>0为真,逻辑取反就是0

~是按照二进制位的每一位惊醒取反操作,例如:

-1内存中的补码:11111111111111111111111111111111

~-1:00000000000000000000000000000000

~-1就是0 

前置++   --和后置++   --

前置++  --是先进行自增或自减之后再进行后续的计算

后置++  --是先进行计算之后再自增或自减

其他操作符较为常见,再次不再赘述 

6.关系操作符

  1. 大于(>)
  2. 小于(<)
  3. 大于等于(>=)
  4. 小于等于(<=)
  5. 等于(==)
  6. 不等于(!=)

关系操作符有以上几种,等于和不等于适用于所有的类型,其他的操作符不适用于布尔类型,因为布尔类型只有ture和false

7.逻辑操作符

        常见的逻辑操作符有三种

逻辑与(AND)

符号:&&

A&&B   当A和B都为真的时候A&&B为真

逻辑或(OR)

符号:||

A||B     当A和B有一个为真的时候 A||B  为真

 非(NOT)

符号:!

!A   当条件 A 为假时,取反后结果为真。

8.条件操作符

又称三目操作符,可以同时操作三个变量

exp1?exp2:exp3

如果表达式1为真,那么就计算表达式2,表达式2的结果为整个式子的 结果;如果表达式1为假,那么就计算表达式3,表达式3的结果为整个式子的结果。

  • 例:问:将下列式子转化为条件表达式是什么样的?

if (a > 5)

b = 3;

else

b = -3;

答:

b = (a > 5 ? 3 : -3);

9.逗号表达式

逗号表达式,就是⽤逗号隔开的多个表达式。 逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。

/代码1
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式
c=13
//代码2
if (a =b + 1, c=a / 2, d > 0)
//此时的判断条件只有d>0
//代码3
a = get_val();
count_val(a);
while (a > 0)
{
 //业务处理
 a = get_val();
 count_val(a);
}
如果使⽤逗号表达式,改写:
while (a = get_val(), count_val(a), a>0)
{
 //业务处理
}

10.下标访问 [ ]、函数调用()

10.1下标访问[ ]

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

int arr[10];//创建数组

arr[9] = 10;//实⽤下标引⽤操作符。

[ ]的两个操作数是arr和9。

10.2函数调用操作符 ()

接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。

#include <stdio.h>
void test1()
{
 printf("hehe\n");
}
void test2(const char *str)
{
 printf("%s\n", str);
}
int main()
{
 test1(); //这⾥的()就是作为函数调⽤操作符。
 test2("hello");//这⾥的()就是函数调⽤操作符。
 return 0;
}

11.操作符的属性:优先级、结合性

11.1优先级

优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是 不⼀样的。

1 3 + 4 * 5;

上⾯⽰例中,表达式 3 + 4 * 5 ⾥⾯既有加法运算符( + ),⼜有乘法运算符( * )。由于乘法 的优先级⾼于加法,所以会先计算 4 * 5 ,⽽不是先计算 3 + 4 。

11.2结合性

如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符 是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执⾏),少数运算符是右 结合(从右到左执⾏),⽐如赋值运算符( = )。

1 5 * 6 / 2;

上⾯⽰例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执⾏,先计算 5 * 6 , 再计算 6 / 2 。运算符的优先级顺序很多,下⾯是部分运算符的优先级顺序(按照优先级从⾼到低排 列),建议⼤概记住这些操作符的优先级就⾏,其他操作符在使⽤的时候查看下⾯表格就可以了。

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

15

逗号运算符

表达式,表达式,…

左到右

--

 感谢阅读,新手小白若有错误请指出。

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值