在C语言中,有大量的操作符用于调控程序,从而使程序更加凝练简洁。操作符按照其功能特点可分为算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符。
一、算术操作符
简单的算术运算符 +、-、*、/、%均为算术操作符,其用法简单易懂。下以“+”用法为例用以简单介绍,加法运算符用于加法运算,使其两侧的值相加。例如,语句:
printf("%d",4+20);
打印出来的值是24而不是表达式20+4。相加的值(运算对象)可以是变量,也可以是常量。在运算时,计算机或查看加法运算符右侧的两个变量(或常量),把它们相加,然后把和赋给左侧的变量。
减法运算与加法运算用法类似,是使其两侧的值相减。+和-都被称为二元运算符,即这些运算符需要两个运算对象才能完成操作。乘法运算类似。
c使用/来表示除法,/左侧的值为被除数,右侧的值为除数。整数除法和浮点数除法不同,浮点数除法的结果是浮点数,整数除法的结果是整数。整数是没有小数部分的数,整型除法中实际结果的小数部分将会被丢弃。此时需注意,整数除法会截断计算结果的小数部分,而不会四舍五入结果。混合整数和浮点数计算结果是浮点数。实际上,计算机不能真正用浮点数除以整数,编译器会把两个运算对象转换成相同的类型。
对于%来说,则要求两个数必须为整型。
二、移位操作符
移位操作符有左移<< 和 右移>> 两种,移位移的是二进制位。在计算机中,内存存的为补码,任何一个二进制数都有原码、反码和补码。整数的原码、反码和补码都一样,负数的反码是除符号位其余各位按位取反,补码为在反码的基础上加1。
左移操作,左边位直接丢弃,右边补零,被移位数保持不变(前提是原数赋移位后的值),左移有乘2的效果。例如10的补码为
00000000 00000000 00000000 00001010 左移一位后变为
00000000 00000000 00000000 00010100 其对应的十进制数为20 。
右移有算术右移和逻辑右移两种情况,算术右移为右边丢弃,左位不符号位(正数补0,负数补1);逻辑右移为右边丢弃,左边补0 。右移操作取决于编译器,大部分编译器采用算术右移。这里要注意移位运算符不能移位负数位。
三、位操作符
位操作符有按位异或^、按位与&、按位或 | 。按位异或两同等位相同时取0,不同时去1;按位与两同等位都为1时取1,只要有任何一方为0就取0;按位或两同等位同为0时取0,只要有任何一方为1就取1 。
注:a^a=0; a^0=a
四、赋值操作符
赋值操作符有=、+=、-=
a=a+10可以写成为a+=10
五、单目操作符
!逻辑反操作(真变假,假变真); - 负值 ; +正值 ;&取地址; sizeof 操作数的类型长度;
~对一个二进制数进行按位取反(符号位参与取反)
六、关系操作符
关系操作符有> 、>=、< 、<=、!=、==(相等)
七、逻辑操作符
&&(与)、||(或)
a逻辑b(a、b可能为代数运算)
在与运算中,若a为假,则b不必再算;在或运算中,若a为真,则b不必再算
八、条件操作符
exp1?(exp2:exp3)
例如:b=a>5?3:-3
意思为若a大于5,则b为3,否则为-3.