黑马程序员-基本运算

时间:2022-12-08 21:39:32

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

C语言之所以被广泛的应用,是因为其有这强大的功能,当然C语言的计算能力也是十分强大的,光运算符就有34种。

算数运算符:

加法运算符

int a = 10;

int b = 9;

a = a + b;

其中的a = a + b;就是加法运算符。

减法运算符 和 负值运算符

int b = 10;

int a = -12;

a = b - a;

当中的Int  a = -12;就是一个负值运算符,

而 a = b - a;是一个加法运算符,两者应该尽量区分。

乘法运算符

int a = 10 * 5;

乘法运算符应该注意:在以前我们学习的数学中使用X作为乘法符号,但计算机会将其认为是字母,真正计算机识别的运算符是*。

除法运算符

double a = 1 / 2;

除法运算符和我们在数学中所学的也有区别,1/2不是数学中的二分之一,在计算机中/是除法运算符

double b = 2.5 / 2;

double a = 5 / 2;
double c = (double)5 / 2;

在以上两行代码中第一行会自动输出为小数类型,2.5是一个double型的数据,计算机会自动进行类型提升的转化将2也转为double型数据

而第二行5/2计算出来时会自动省略后面的小数位数,只会输出整数部分,所以如果想让两个整数计算出double型数据,要将其中一个数值进行强制类型转化操作

但是如果写成double c = (double )(5/2);也是不能达到转化类型的目的的,计算机在计算时就是略去小数部分


取余运算符

取余运算又称模运算,%是其运算符。模运算是取两个整形数值相除后的余数,例如:2%5的结果是2,7%5的结果为2 ,

而且要特别注意的是两边参与运算的都是整数,不能出现其他类型的数据

a = 5 / 2;

b = -3 / 2;

c = -3 / -2;

d = 3 / -2;

上面的一行代码输出结果为 1 ,-1 ,-1 ,1 。由 结果我们可以推论在有负数参与运算时,其正负性只与左边的数值有关,与右边的数值无关。


赋值运算符

 ” =  "就是赋值运算符

int a ,b ,c ;

a = b = c =10;

10 = 10 - 1;

第一行是定义了a,b c三个变量,第二行是对这三个变量进行了连续的赋值运算。

第三行明显是错误写法,等号左边一般是不会写一个常量的,常量是固定不变的无法再接收数值

复合赋值运算符

  • +=  加赋值运算符。如a += 1 + 2,等价于 a = a +(1 + 2)
  • -=  减赋值运算符。如a -=1 + 2,等价于 a = a -(1 + 2
  • *=  乘赋值运算符。如a *=1 + 2,等价于 a = a *(1 + 2
  • /=  除赋值运算符。如a /=1 + 2,等价于 a = a /(1 + 2
  • %=  取余赋值运算符。如a %=1 + 2,等价于 a = a %(1 + 2

自增自减运算符

"++"为自增运算符。例如:a++其实就是 a = a +1

“--”为自减运算符。例如:a--其实就是 a = a - 1

a++和++a的不同之处

int a = 6;

int b = (a++)+(++a);
进过这两句代码后a = 8,b = 14。a经过两次自增运算结果为8不难理解。

而a++是先赋值再自增,++a是先自增再赋值。所以b的计算实际为b = 6 + 8=14.


关系运算符

关系运算符涉及到真假性问题,比较两数值的关系,成立为真返回值“1”,不成立为假返回值为“0”

在C语言中为其提供一个非0数值其真假性都是为真的,所以要保持一个关系一直成立只需为其提供一个非0的数值


<   小于。比如a<5

<=  小于等于。比如a<=5

>   大于。比如a>5

>=  大于等于。比如a>=5

==  等于。比如a==5

!=  不等于。比如a!=5

举例:

int c = 4 > 5;
在C语言中以上代码是不会报错的,因为关系不成立,为假。所以他会给c返回一个0。


逻辑运算符

有些情况我们需要多种条件成立时才会执行某些操作,所以强大的C语言就给我们提供了逻辑运算符让我们解决这些问题。

&&逻辑与

格式:条件1 && 条件2 ;

(a < b) && (c < d);
只有当条件1 和条件2 两个条件都成立时才为真,即返回值1,否则为假,返回0.如果其中一个不成立就为假。

判断总是从左到右进行。

先判断条件1 是否成立,成立后判断条件2 。如果条件1不成立,则不会再判断条件2 是否成立,会直接返回0.

其中值得注意的是:

写90-100这个数值范围时:

不可以写成:90<a<100,这是错误的

正确写法:(90<a)&&(100>a);

逻辑或

格式:条件1 || 条件2 

( a < b) || (b < f);
条件1 和 条件2 只要有一个为真就成立返回1 ,只有在都为假时才会返回0.

判断也是从左到右进行。

先判断条件1 是否成立再判断条件2 是否成立,如果条件1 成立直接返回1,不会再判断条件2 。

如果条件1不成立,则会判断条件2 ,如果条件2 成立返回1 ,如果条件2 不成立,则返回0。


逻辑非

格式:!条件A

!(a < b);

就是对条件A进行取反,如果条件A成立则返回0,如果不成立就返回1.


逻辑非的判断顺序是从右到左,不同于逻辑与和逻辑或。


逻辑非可以取反多次。例如:!!!(2<3);这个取反了三次,则返回值为1。


三目运算符

连接一个数据的符号,叫做“单目运算符”,例 !2 ,-4。

连接二个数据的符号,叫做“双目运算符”,例 5+7,4||5。

由此可知连接三个数据的叫做“三目运算符”。


格式:条件A?数值1:数值2

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

如果条件A成立则返回数值1 ,如果不成立就返回数值2 。

其运算方向是从右到左


位运算符:

位运算是针对二进制数运算的,而且只能对整数进行运算


按位于

格式:整数1 & 整数2

如果两个整数对应位都是1才会返回1 给结果,否则返回0给对应为。

规律:

1.相同整数相&的结果是整数本身。

2多个整数相&的结果和顺序无关。

按位或

格式:整数1 | 整数2 

如果两个整数对应位有一个是1,就返回1 ,否则返回0。

规律

1.相同整数|的结果是整数本身

2.多个整数|的结果和顺序无关

按位异或

格式:整数1 ^ 整数2

如果两个整数的对应位相同则返回1 ,否则则返回0。

规律

1.二进制中,与1相^就会取反,与0相^保持原位

2.相同整数相^的结果是0。

3.多个整数相^的结果跟顺序无关。

4.因此得出结论:a^b^a = b

取反

格式:~数值

此运算会将所给数值的对应位依次取反。

左移

格式:数值<<整数n

会将数值的二进制数向左移动n位,空余位用0补齐

由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

右移

格式:数值>>整数n

会将数值的二进制数向右移动n位,空余位用0补齐

把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方


优先级

运算优先级遵照下表:

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

 

()

圆括号

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

 

.

成员选择(对象)

对象.成员名

 

->

成员选择(指针)

对象指针-》成员名

 

2

-

符号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

 

++

自增运算符

++变量名/变量名++

单目运算符

--

自减运算符

--变量名/变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

Sizeof(表达式)

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

双目运算符

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!=表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

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

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

 

/=

除后赋值

变量/=表达式

 

*=

乘后赋值

变量*=表达式

 

%=

取模后赋值

变量%=表达式

 

+=

加后赋值

变量+=表达式

 

-=

减后赋值

变量-=表达式

 

<<=

左移后赋值

变量<<=表达式

 

>>=

右移后赋值

变量>>=表达式

 

&=

按位与后赋值

变量&=表达式

 

^=

按位异或后赋值

变量^=表达式

 

|=

按位或后赋值

变量|=表达式

 

,

逗号运算符

表达式,表达式,……

左到右

从左到右顺序运算