【黑马程序员】C语言学习笔记之基本运算(七)

--------------------------------------------IOS期待与您交流!--------------------------------------------

一、算术运算符

1>加法运算符 +

2>减法运算符 或 负值运算符 - 

3>乘法运算符 * 

4>除法运算符 / 

5>模运算符 或称 取余运算符 %

 %两侧必须都为整数,并且结果值与被除数一致,即与 % 左边的数一致6>运算顺序
优先级不同时:先运算优先级高的,再运算级低的
优先级相同时:从左到右运算
如果想强制进行某些运算,可以使用小括号(),小括号()的优先级别最高
关于优先级别:请转到 十、优先级别

二、赋值运算符

1>简单赋值运算符 =

等号 = 表示把 = 右边的数赋值给 = 左边的变量,如下
int a = 10;
表示把10 赋值给a,这样a的值就是10了。
还可以连续赋值
int a, b;
a = b = 10;
注意:等号=左边只能是变量,不能是常量

2>复合赋值运算符

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

三、自增运算符和自减运算符

++  自增运算符。如a++,++a,都等价于a = a+1
--  自减运算符。如a--,--a,都等价于a = a-1

1>++a和a++的区别

单独使用++a和a++时,它们是没区别的
下面这种情况,++a和a++就有区别了
int a = 10;
int b = ++a;
++a的意思是先对a执行+1操作,再将a的值赋值给b。因此最后a、b的值都是11
int a = 10;
int b = a++;
a++的意思是先将a的值拷贝出来一份,然后对a执行+1操作,于是a变成了11,但是拷贝出来的值还是10,a++运算完毕后,再将拷贝出来的值10赋值给了b,所以最后变量b的值是10,变量a的值是11
--a和a--的区别也是一样的。
例子:
int a = 10;
a = a++;
分析:先将a的值拷贝出来一份,然后对a执行+1操作,于是a变成了11,但是拷贝出来的值还是10,a++运算完毕后,再将拷贝出来的值10赋值给了a,所以最后变量a的值是10

四、sizeof

sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
sizeof一共有3种形式:
sizeof( 变量\常量 )
sizeof  变量\常量
sizeof( 数据类型 )
注意,不可以写成sizeof float;

五、逗号运算符

逗号运算符主要用于连接,它的一般形式为:表达式1, 表达式2, … …, 表达式n
逗号表达式的运算过程是:从左到右的顺序,先计算表达式1,接着计算表达式2,...,最后计算表达式n
逗号运算符也是一种运算符,因此它也有运算结果。整个逗号表达式的值是最后一个表达式的值

六、关系运算符

<   小于。比如a<5
<=  小于等于。比如a<=5
>   大于。比如a>5
>=  大于等于。比如a>=5
==  等于。比如a==5
!=  不等于。比如a!=5
关系运算符的运算结果只有2种:如果条件成立,结果就为1,也就是“真”;如果条件不成立,结果就为0,也就是“假”。

七、逻辑运算符

C语言提供了3个逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)。注意:这些都是英文字符,不要写成中文字符。跟关系运算符一样,逻辑运算的结果只有2个:“真”为1,“假”为0。

1>&& 逻辑与

使用格式:“条件A && 条件B”
运算结果:只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假”
运算过程
总是先判断条件A是否成立
如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”
如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是“假

2>||  逻辑或

使用格式:“条件A || 条件B”
运算结果:当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。
运算过程
总是先判断条件A是否成立
如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”
如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”

3>!   逻辑非

使用格式:“! 条件A”
运算结果:其实就是对条件A进行取反:若条件A成立,结果就为0,即“假”;若条件A不成立,结果就为1,即“真”。也就是说:真的变假,假的变真。
注意
可以多次连续使用逻辑非运算符:!(4>2)结果为0,是“假”,!!(4>2)结果为1,是“真”,!!!(4>2)结果为0,是“假”
C语言规定:任何非0值都为“真”,只有0才为“假”。因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。!5、!6.7、!-9的结果都为0,!0的结果为1

八、三目运算符

C语言提供了唯一一个三目运算符:条件运算符。
使用格式:表达式A ? 表达式B : 表达式C
运算结果:如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值

九、位运算符

1> & 按位与

使用形式:整数a & 整数b
功能:整数a和b各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
举例:比如9&5,其实就是1001&101=1,因此9&5=1
规律
相同整数相&的结果是整数本身。比如5&5=5
多个整数相&的结果跟顺序无关。比如5&6&7=5&7&6

2>| 按位或

使用形式:整数a | 整数b
功能:整数a和b各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1,否则为0。参与运算的数以补码方式出现。
举例:比如9|5,其实就是1001|101=1101,因此9|5=13
规律
相同整数相|的结果是整数本身。比如5|5=5
多个整数相|的结果跟顺序无关。比如5|6|7=5|7|6

3> ^ 按位异或

使用形式:整数a ^ 整数b
功能:整数a和b各对应的二进位相异或。当对应的二进位相异(不相同)时,结果为1,否则为0。参与运算的数以补码方式出现。
举例:比如9^5,其实就是1001^101=1100,因此9^5=12
规律
二进制中,与1相^就会取反,与0相^保持原位
相同整数相^的结果是0。比如5^5=0
多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6
因此得出结论:a^b^a = b

4> ~ 取反

~为单目运算符,具有右结合性
使用形式:~整数a
功能:对整数a的各二进位进行取反(0变1,1变0)
举例:比如~9,其实就是~(0000 0000 0000 0000 0000 0000 0000 1001)=(1111 1111 1111 1111 1111 1111 1111 0110),因此~9=-10

5> << 左移

<<是双目运算符
使用形式:整数a<<正数n
功能:把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方。
举例:3<<4,3本来是0000 0011,左移4位后变成了0011 0000,因此3<<4 = 48 = 3 * 24
注意:由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

6> >> 右移

>>是双目运算符
使用形式:整数a>>正数n
功能:把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方。
举例:32>>3,32本来是0010 0000,右移3位后变成了0000 0100,因此32>>3 = 4 = 32 / 23

十、优先级别

【黑马程序员】C语言学习笔记之基本运算(七)_第1张图片

--------------------------------------------IOS期待与您交流!--------------------------------------------

详细请查看:http://edu.csdn.net

你可能感兴趣的:(C语言,运算符)