C语言基础之操作符总结
操作符是告诉编译程序执行特定算术和逻辑操作的符号,C语言供了多种操作符,具有很强的运算能力。C语言的操作符可分为以下几类。
1. 算数操作符:用于各种数值的计算。由加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)组成。其中加减乘除运算符属于双目运算符,自增自减运算符属于单目运算符。特别注意有三点,其一,求余符(%)要求两端均是整数,即(int)型,不可以是(double),或是(float)型。其二,自增自减运算符只针对变量操作,不可用作常量或表达式。例如6++或(a+b)++都是错误用法。自增自减操作符有两种表达形式:(++i)、i++)。需注意两种运算的区别。最后,++,--,和负号运算符的优先级相同,但比正号运算符(+)优先级别高。
2. 赋值操作符。赋值操作符分为简单赋值和复合赋值两种操作符。 简单赋值就是把一个数据赋给一个变量。例如a=5;r=x/y这样的操作。赋值运算符左边只能是变量而不能是常量或表达式,例如(a+b)=5这个式子就不是合法表达式。赋值运算符不等同于数学表达式中的等号,二者不可混为一谈。在赋值符号前加上其他运算符就构成了复合赋值。例如“+=”,“%=”等,参加复合运算的两个操作数,要先进行算术运算,然后将结果赋值给第一个操作数。温馨提示,(c=a=b+1)类似连续赋值应少用,避免出错。
3. 关系操作符。表示两个分量之间大小关系,C语言提供了六种操作符,它们是:>、>=、<、<=、==、!=(不等于),其中前四种优先级相同,后两种优先级相同,但前者高于后者。
4. 逻辑操作符,由(&&)逻辑与,(||)逻辑或,(!)逻辑非三种组成。“&&”有一假则为假,“||”有一真则为真。典型例题:{ int a=0;int b= 2; int c=;,int d=4; i=a++&&b++&&d++; },要求结果输出i。需要注意逻辑操作都是对内存中二进制数进行操作。
5. “sizeof()”求变量类型的大小的操作数。特别注意“sizeof”不是函数。对于变量而言,有两种表现形式即:int a; printf(‘%d’,sizeof a)和printf(‘%d’,sizeof(int)).两个都是求变量类型的大小,但后者必须sizeof后必须带上“()”。另外printf(‘%d’,sizeof (a+1))中sizeof括号里的表达式只在该句中作用,运算结果不会作用于该句外面的变量值。对于数组而言,定义一个数组 int arr[10], printf(‘%d’,sizeof (arr)),该句中的arr表数组,运算结果40,表示整个数组所占内存的大小,printf(‘%d’,sizeof arr+0),运算结果为4,表示数组第一个元素的所占内存空间的大小,
6. “ * ”间接访问操作符,只对指针作用。例如( int a;int* p = & a;),注意,不可单纯的将指针与常量连用,例如(*20),属于非法操作。
7. “&”取地址操作符。对变量进行取地址操作。
8. “()”函数调用操作符。至少有一个操作数,即调用函数名。
9. 移位操作数。由>> 和<<组成。其中左移相当于二进制中乘二操作,右移相当于二进制数除二操作。左移,左抛弃,右补零,右移时,如果是算数移位,则左边按原符号位填充,右边抛弃,常用这种方法进行右移位。而如果是逻辑移位,则是左边补零,右边抛弃。均是针对内存中二进制数进行操作。
10. 条件表达式,(exp1 ? exp2 : exp3),若exp1为真,执行exp2 , 若exp 1为假时,执行exp3。
11. “[ ]”运算符。常用于数组中。例如arr[4]=5 ;4[arr]=5;两者运算结果相同。类似于交换律。
12. “.” “→”,者多用于结构体创建中,后者用于指针。
13. 逗号操作符,表现形式:exp1,exp2, 从左到右依次计算,但结果是最后一个表达式的值。
14. 总结1,左移,右移,逻辑与或非,按位取反,都是对内存中二进制数操作,正数以原码形式操作,负数以补码形式操作。
15. 总结2,优先级顺序:算数运算符>关系运算符>赋值运算符