C语言操作符总结(含代码讲解)

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
#include
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
#include
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.是否控制求值顺序
操作符优先级:
C语言操作符总结(含代码讲解)_第1张图片

你可能感兴趣的