C语言基本操作符分为算术操作符、移位操作符、位操作符、赋值操作符、复合赋值符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下表引用、函数调用、结构成员。 算术操作符:+(加) - (减) * / % 贴别提醒:/(1)当/左右两个数字均为整形(int)时,结果为整数。(如5/3=1) (2)当/左右有任何一个为float或double时,结果为浮点型。(如5.0/3=1.6666…) % 此运算符左右数字必须为int型。 移位操作符:>>(右移操作符) <<(左移操作符) 当一个数字为正整数时,转化为二进制右移一位有除二效果;左移一位有乘二效果。 例如:15(十进制)00000000000000000000000000001111(二进制) 右移一位(左边补0,右边摒弃) 00000000000000000000000000000111(二进制) 结果为数字7 左移一位(右边补0,左边摒弃) 00000000000000000000000000011110(二进制) 结果为数字30 当数字为负数时,计算机存储的是该数的补码。 例如:-1 10000000000000000000000000000001(原码) 11111111111111111111111111111110(反码) 11111111111111111111111111111111(补码)(反码加1为补码) 最高位1代表负数,0代表正数。 所以a>>=1时结果不发生变化,a<<=1发生变化。 贴别提醒:a>>-1这种表达形式是不合法的,左移右移操作符后面数字必须为正整数。 位操作符:&(按位与) |(按位或) ^(按位异或) 例如:3&4 011&101 结果为001 (按位与真真为真,所以只有1+1=1) 3|4 011|101 结果为111(按位或一方为真且为真,所以1+0=1,1+1=1) 按位异或相同为0,相异为1(二进制按位异或与数字无关) 不创建第三个变量交换两个数可用异或。 逻辑操作符:&&(逻辑与) ||(逻辑或) 位操作符与逻辑操作符的区分: 1&2 结果为0 1&&2 结果为1 1|2 结果为3 1||2 结果为1 赋值操作符:= 复合赋值符:+= *= /= %= >>= <<= &= |= ^= 单目操作符:!(逻辑反操作)+(正数) -(负数)&(取地址) sizeof(操作数的类型长度)~(对二进制按位取反) --(前置、后置) ++(前置、后置) *(解引用操作符) (类型)(强制类型转换) 例如:!0=1,!10=0(非零为真(1),非真为假(0)) sizeof为操作符,非函数。int a=4,sizeof(int)=sizeof(a)=4 前置—— ++ 为先运行再赋值 后置—— ++为先赋值再运算 例如: 360面试题
#include<stdio.h> #include<stdlib.h> int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++; printf("a=%d\tb=%d\tc=%d\td=%d\n", a, b, c, d); system("pause"); return 0; }&&(逻辑与)运算符,真真且为真,一假就为假。题a++先赋值再运算,即a=0,整个式子为假,b,c,d不参与运算,++再赋给a,结果为a=1,b=2,c=3,d=4.
#include<stdio.h> #include<stdlib.h> int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ || ++b || d++; printf("a=%d\tb=%d\tc=%d\td=%d\n", a, b, c, d); system("pause"); return 0; }||(逻辑或)运算符,一真且为真,一假继续判断后面的。此题中++b,b=3,式子为真,c,d不参与运算,所以结果为a=1,b=3,c=3,d=4. 条件操作符:(三目运算符) exp1?exp2:exp3 判断exp1,如为真直接执行exp2,如为假直接执行exp3. 逗号操作符: exp1,exp2,exp3…expN 从左到右依次运算,但结果只为最后一个表达式的结果。 下标引用操作符: [ ] (对应两个操作数) 例如:arr[10] 写成10[arr]也是正确的 函数调用操作符:( )(至少对应一个操作数) 例如:ADD(a,b)(三个操作符,一个为函数名,剩余为传给函数的参数) 访问结构体成员 struct student{ }; 隐式类型转换: C的整形算术运算总是至少以缺省的整形类型精度来进行,为了计算这个精度,表达式中字符和短整型操作数在使用之前都要转化成普通整型,这个转换称为整型转换. 操作符的属性: 1.操作符的优先级 2.操作符的结合性 3.是否控制求值顺序 操作符优先级: