目录
一、转义字符:
二、转义说明:
三、运算符以及优先顺序
1.算术运算符(+-*/%)
2.自增与自减运算符(++ - -)
3.sizeof运算符(sizeof)
4.类型转换运算符
5.关系运算符(< ≤ > ≥)与相等性运算符(== !=)
6.逻辑运算符(&& ||)
7.按位运算符(& | ^ << >> ~)
8.条件运算符 (?:)
9.赋值运算符(=)
10.总的优先顺序
一、转义字符:
二、转义说明:
三、运算符以及优先顺序
1.算术运算符(+-*/%)
+-:分为两种,一种是加减运算,一种是正负
加减运算是二元运算符(需要两个运算对象)从左向右结合正负是一元运算符(只需要一个运算对象即可)从右往左结合
/:乘除运算 都是二元运算符从左往右结合
*没什么好说的,/要注意,两个整数的除法,如果有小数部分,就会被丢弃(计算机不会四舍五入),这一过程叫做截断,所以计算5/9,该数值为0,要将其改为浮点数运算,即5.0/9
%:求模运算符 二元运算符从左往右结合
只能运用于整数之间的求余运算,不支持浮点数。
当运算对象中有负值时,运算结果符号值根据不同机器有不同实现,C99规定,求模符号之前的值是正的,那么运算结果就是正的,是负的,运算结果就是负的
eg:-11%-5=-1; 11%-5=1
💡优先级:+-(正负)> * / % > +-(加减)
2.自增与自减运算符(++ - -)
二者均可以作为前缀运算符(++a;- -a);也可以作为后缀运算符(a++;a- -);前缀后缀都起到同样的效果,就是将变量a的值增大(减小)1,不同的是二者本身的值,详细来说,就是++a是将a先增加1,然后使用a的值;而a++则是先使用a的值然后再使a增加1,那么后缀a++(- -)本身的值还是为加(减)1之前的值,而前缀++(- -)a本身的值是加完1后的值(也就是跟变量值相同);.
eg:q=2*++a; 先将a的值加1,然后再乘2,得到的值赋给q;
q=2*a++;:可以这么理解:将“a的值赋给a++”,然后a加上1,然后2乘上a++的值(也就是a加1之前的值),将乘积的值再赋给q。
💡优先级:()>++ - - > 算术运算符(不包括正负,正负与++ - -相同优先级)
3.sizeof运算符(sizeof)
sizeof以字节为单位,返回运算对象的大小
运算对象可以是变量,可以是类型(是类型的时候需要用圆括号括起来)
eg: sizeof a; sizeof (int);
💡优先级:与自增自减运算符同优先级
4.类型转换运算符
基本类型转换的规则: 涉及两种类型的运算时,两个值会分别转换两种类型的更高级别赋值表达式语句中,计算结果会被转换成赋值变量的类型当作为函数参数传递时,char 和short 会转换成int,float会转换成double(type):强制类型转换运算符,eg: (int)1.3;这样会使1.3转换成int型也就是1;5.关系运算符(< ≤ > ≥)与相等性运算符(== !=)
结合顺序都是从左向右结合
💡优先级:算术运算符 >(< ≤ > ≥)> (== !=)
6.逻辑运算符(&& ||)
&&:并,必须同时满足两方条件才为真从左向右结合**|| :**或,只要满足一方条件就为真从左向右结合💡优先级:算术运算符 >关系运算符 >相等性运算符 > && > ||
7.按位运算符(& | ^ << >> ~)
&:按位与运算符:从左向右结合
参与运算的两个运算对象,其二进制位相对应的只有两个都为1的时候,运算结果相对应的位才为1。
eg:3&10(00000011&00001010)=2(00000010) //只有第二位都是1,所以结果只有第二位是1.
这个运算符经常用来屏蔽某些二进制位,
eg: n=n&0177; //0177是八进制,对应二进制01111111,只有最低7位是1,高位都是0,所以做了这个运算以后,n的高位也会是0,最低7位还保持原样,这就屏蔽了n的二进制高位
还可以判断奇偶性
a&1=0, 偶数;a&1=1, 奇数。
|: 按位或运算符:从左向右结合
跟&概念相似,只不过是只要其中一个是1,结果相对应的位就是1,
eg: 9|5(00001001|00000101)=13(00001101)//第一位三位四位都为1
这个运算符可以使某些位变成1,而其他保持不变;
^:按异或运算符:从左向右结合
当两个操作数对应位不相同时,结果对应位为1;否则为0
eg:9^5(00001001^00000101)=12(00001100) //与按位或的区别在于将按位或,为1的情况有两种,只有该位置只有一个操作数为1,第二种情况是该位置两个操作数都为1。而按异或就只是第一种情况。
这个运算符可以使某些位取反,其他保持不变
<<: 左移运算符:从左向右结合
将位数左移,如x<<2; 将x的值左移2位,右边空出的两位用0填补 //其实就是将值乘以2^2也就是4.(数字没有溢出的情况下)
>>:右移运算符:从左向右结合
将位数右移,如x>>2; 将x的值右移2位,左边空出的两位用符号位填补(如果是无符号的就用0填补) 因为在计算机内部,负数是以补码的形式存在的,所以负数右移高位补1就合理了。
//其实就是将值除以2^n,正数如果有小数,那么舍去小数,负数如果有小数,舍去小数再减1
eg: -9>>2=-3; 9>>2=2;
~:按位求反
(一元运算符)每一位(包括符号位)都取反(0变1 1变0)总结:~x=-(x+1);
💡 优先级:~(与++ - - 正负相同优先级)>算术>移位>关系>相等性>&>^> | >逻辑
8.条件运算符 (?:)
表达式: 表达式1?表达式2:表达式3;从右向左结合
若表达式1为真(非0),则执行表达式2;
若表达式1为假(0),则执行表达式3
结合顺序:从右到左先找最右边的问号,然后找离它右边最近的冒号
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。如果在问号和冒号之间还有一个问号或者冒号,应该满足就近配对,使结构不发生紊乱。
例如:w < x ? x + w : x < y ? x : y 与 w < x ? x + w : ( x < y ? x : y) 等价 与 (w < x ? x + w : x < y) ? x : y 不等价 a > b ? c > d ? e : f : g 与a > b ? (c > d ? e : f) : g等价
💡优先级:()> 自减自增 >算术 > 关系 > 相等性 > 逻辑运算符 > ? :
9.赋值运算符(=)
从右到左结合也可以和其他运算符结合,比如+= eg: i+=2 这个表达式的意思就是i=i+2 ,除此之外还有- =;*=;/=;%=;<<= ;>>=;&=;^=;|=;只要是二元运算符都可以和赋值运算符=结合,(a op= b),其等价于(a= (a) op (b))10.总的优先顺序
优先级从高到低排列如下