------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;进过这两句代码后a = 8,b = 14。a经过两次自增运算结果为8不难理解。
int b = (a++)+(++a);
而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 |
= |
赋值运算符 |
变量=表达式 |
右到左 |
|
/= |
除后赋值 |
变量/=表达式 |
|
||
*= |
乘后赋值 |
变量*=表达式 |
|
||
%= |
取模后赋值 |
变量%=表达式 |
|
||
+= |
加后赋值 |
变量+=表达式 |
|
||
-= |
减后赋值 |
变量-=表达式 |
|
||
<<= |
左移后赋值 |
变量<<=表达式 |
|
||
>>= |
右移后赋值 |
变量>>=表达式 |
|
||
&= |
按位与后赋值 |
变量&=表达式 |
|
||
^= |
按位异或后赋值 |
变量^=表达式 |
|
||
|= |
按位或后赋值 |
变量|=表达式 |
|
||
, |
逗号运算符 |
表达式,表达式,…… |
左到右 |
从左到右顺序运算 |