C语言一共有34种运算符,以下:面试
运算符分类:函数
1.按照功能划分:设计
(1)算术运算符3d
(2)关系运算符blog
(关系运算的结果成立就为“真”==1, 不成立则为“假”==0)内存
(3)逻辑运算符程序设计
(&按位与 若是两个相应的二进制都为1, 则该位的结果值为1, 不然位0;class
| 按位或者两个相应的二进制位 只要有一个为1, 该位的结果值为1;变量
^ 按位 异或 若参加运算的两个二进制位值相同 则为0, 不然为1;数据类型
~ 取反 是一元运算符, 用来对一个二进制数按位取反,即将0变为1,将1 变为 0;
<< 左移用来将一个数的各二进制位所有左移N位,右补0;
>> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0)
基本运算
(1)运算符根据参与运算的操做数的个数,分为:
(2)优先级:oc中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的 结合性所规定的结合方向处理。(注:只须要记住( )优先级最高便可)
(3)c语言中,各类运算符的结合性分为两种,左结合性(自左向右)和右结合性(自右向左)
* 整数除于整数,求出来的结果依然是整数
* 浮点型赋值给整型会损失小数部分
* %两侧必须都为整数
* 利用%求出来的余数是正数仍是负数,由%左边的被除数决定,被除数是正数,余数就是正数,反之则反
(4)算术运算的注意点
(5)赋值运算符
/= 除后赋值 变量/=表达式 如:a/=3;即a=a/3
*= 乘后赋值 变量*=表达式 如:a*=3;即a=a*3
%= 取模后赋值 变量%=表达式 如:a%=3;即a=a%3
+= 加后赋值 变量+=表达式 如:a+=3;即a=a+3
-= 减后赋值 变量-=表达式 如:a-=3;即a=a-3
(6)自增运算符
在程序设计中,常常遇到“i=i+1”和“i=i-1”这两种极为经常使用的操做。C语言为这种操做供了两个更为简洁的运算符,即++和--,分别叫作自增运算符和自减运算符。它们是单目运算符,是从右向左结合的算术运算符。
在程序设计中,常常遇到“i=i+1”和“i=i-1”这两种极为经常使用的操做。C语言为这种操做供了两个更为简洁的运算符,即++和--,分别叫作自增运算符和自减运算符。它们是单目运算符,是从右向左结合的算术运算符。
int b; int a = 10; b = ++a;//若是++在前表明先自增再参与其它运算 // a = a + 1; b = a; // a = 11 b = 11
后缀表达式:x++, x--;先用x的当前值做为表达式的值,再进行自增自减1运算。即“先用后变”,也就是先用变量的值参与运算,变量的值再进行自增自减变化。
int b; int a = 10; b = a++;//若是++在后表明先参与其它运算再自增 // b = a; a = a + 1; // a = 11 b = 10
通常形式形式:表达式1,表达式2,… …,表达式n; 例如:a=a+1,b=3*4;
b = (a=4, ++a, a * 7); // 1.先执行第一个表达式, 将4赋值给a // 2.再执行第二个表达式, 让a自增变为5 // 3.再执行第三个表达式, 5 * 7 // 4.最后将最后一个表达式的值做为"逗号表达式的值"返回赋值给b, 因此b等于35
程序中使用逗号表达式,一般是要分别求逗号表达式内各表达式的值,并不必定要求整个逗号表表达式的值。
(8)sizeof的运算符
(9)关系运算符
例如4>3>2:先算4>3,条件成立,结果为1。再与2比较,即1>2,条件不成立,结果为0。 所以4>3>2的结果为0。
例如2==3>1:先算3>1,条件成立,结果为1。再计算2==1,条件不成立,结果为0。 因 此2==3>1的结果为0。
例如3+4>8-2:先计算3+4,结果为7。再计算8-2,结果为6。最后计算7>6,条件成立, 结果为1。所以3+4>8-2的结果为1。
(10)类型转换问题:
(1)自动转换遵循如下规则: *相同数据类型的值才能进行运算(好比加法运算),并且运算结果依然是同一种数据类 型。系统会自动对占用内存较少的类型作一个“自动类型提高”的操做 *若参与运算量的类型不一样,则先转换成同一类型,而后进行运算。 *转换按数据长度增长的方向进行,以保证精度不下降。如int型和long型运算时,先把int量转 成long型后再进行运算。 *全部的浮点运算都是以双精度进行的,即便仅含float单精度量运算的表达式,也要先转换成double型,再做运算。 *char型和short型参与运算时,必须先转换成int型。 *在赋值运算中,赋值号两边量的数据类型不一样时,赋值号右边量的类型将转换为左边量的类型。若是右边量的数据类型长度比左边长时,将丢失一部分数据,这样会下降精度,丢失的部分 按四舍五入向前舍入。
强制类型转换是经过类型转换运算来实现的
其通常形式为:(类型说明符) (表达式)
强制类型转换注意点:
(1)将大范围的数据赋值给小范围变量时,系统会自动作一个强制类型转换的操做,这样容 易丢失精度 (2)类型说明符和表达式都必须加括号(单个变量能够不加括号),如把(int)(x+y)写成(int)x+y则了把x转换成int型以后再与y相加了。 (3)不管是强制转换或是自动转换,都只是为了本次运算的须要而对变量的数据长度进行的临时性转换,而不改变数听说明时对该变量定义的类型。
参考文章:http://www.jianshu.com/p/141e6af7395e