c语言操作符的总结
2018-04-06 17:18
495 查看
1:算术操作符
+ - * / %
除了%操作符,其余几个操作符都是既适用于浮点型又适用于整数型。
当/操作符的两个操作数都是整数时,它执行整除运算,在其他情况下则执行浮点数除法。
%为取模操作符,它只接受两个整型操作数,把左操作数除以右操作数,但它返回的值是余数。
2:移位操作符
<< 左移操作符
移位规则:左边抛弃,右边补零
>>右移操作符
移位规则:(1):逻辑移位
左边用0填充,右边抛弃
(2):算术移位
左边用原值的符号位填充,右边丢弃
下面我们举例子说明,当操作数为有符号数时:
下面举例子说明一下赋值和没被赋值
上面结果表明:num在移位过程中,如果没有被赋值,自身的值不会变。
注意:无论左移还是右移,两个操作数都必须是整数型。
对于移位运算符,不要移动负位,这个是标准未定义的。
3:位操作符
& 按位与(同时为1才为1)
| 按位或(有1得1)
^ 按位异或(相同为0,相异为1;任何数和0异或都是它本身;相同的比特位异或清零)
注:他们的操作数必须是整数
4:赋值操作符
它具有结合性:#include<stdio.h>
#include<windows.h>
int main()
{
int t=0, num =-10;//初始化
t=num=num << 1;//赋值
printf("%d\n %d\n", t,num);
system("pause");
return 0;
}输出结果为:-20 -20
5:复合操作符
+= -= *= /= %= >>= <<= &= |= ^=#include<stdio.h>
#include<windows.h>
int main()
{
int t=0, num =-10;
t += num;
//t=t+num;
printf("%d\n", t);//-10
system("pause");
return 0;
}其他的运算符一样的道理。
6:单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位,可以求变量所占空间大小)
~ 对一个数的二进制按位取反
-- 前置,后置--
++ 前置,后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
7:关系运算符
>
>=
<=
!= 用于测试“不相等”
== 用于测试“相等”
注:注意==和=的区别。
8:逻辑操作符
&&逻辑与
||逻辑或
注:逻辑与、逻辑或是判断真假的,按位与、按位或是对二进制数进行操作的。对逻辑与操作,只要有一个为假,便不必再进行后边的计算;对逻辑或操作,只要有一个为真,便不必再进行后边的操作。 9:条件操作符exp1?exp2:exp3(exp1表达式的值为真,那么整个表达式的值为exp2,exp3不会进行求值;否则整个表达式的值为exp3,不会对exp2进行求值)
下面用例子说明它的用法,它其实实现了和if语句一样的功能。
10:逗号表达式
exp1,exp2,exp3,...expn
规则:逗号表达式从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
11:下表引用、函数调用和结构成员
(1)操作数:一个数组名+一个索引值
(2)函数调用操作符
接受一个或者多个操作符:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
(3)访问一个结构的成员
结构体.成员名
结构体指针->成员名(用于访问一个结构的成员)
eg:s.a(访问s结构体变量中a的成员)
注:当你拥有一个指向结构的指针而不是结构本身,且欲访问它的成员时,就需要用->操作符而不是.
+ - * / %
除了%操作符,其余几个操作符都是既适用于浮点型又适用于整数型。
当/操作符的两个操作数都是整数时,它执行整除运算,在其他情况下则执行浮点数除法。
%为取模操作符,它只接受两个整型操作数,把左操作数除以右操作数,但它返回的值是余数。
2:移位操作符
<< 左移操作符
移位规则:左边抛弃,右边补零
>>右移操作符
移位规则:(1):逻辑移位
左边用0填充,右边抛弃
(2):算术移位
左边用原值的符号位填充,右边丢弃
下面我们举例子说明,当操作数为有符号数时:
下面举例子说明一下赋值和没被赋值
上面结果表明:num在移位过程中,如果没有被赋值,自身的值不会变。
注意:无论左移还是右移,两个操作数都必须是整数型。
对于移位运算符,不要移动负位,这个是标准未定义的。
3:位操作符
& 按位与(同时为1才为1)
| 按位或(有1得1)
^ 按位异或(相同为0,相异为1;任何数和0异或都是它本身;相同的比特位异或清零)
注:他们的操作数必须是整数
4:赋值操作符
它具有结合性:#include<stdio.h>
#include<windows.h>
int main()
{
int t=0, num =-10;//初始化
t=num=num << 1;//赋值
printf("%d\n %d\n", t,num);
system("pause");
return 0;
}输出结果为:-20 -20
5:复合操作符
+= -= *= /= %= >>= <<= &= |= ^=#include<stdio.h>
#include<windows.h>
int main()
{
int t=0, num =-10;
t += num;
//t=t+num;
printf("%d\n", t);//-10
system("pause");
return 0;
}其他的运算符一样的道理。
6:单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位,可以求变量所占空间大小)
~ 对一个数的二进制按位取反
-- 前置,后置--
++ 前置,后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
7:关系运算符
>
>=
<=
!= 用于测试“不相等”
== 用于测试“相等”
注:注意==和=的区别。
8:逻辑操作符
&&逻辑与
||逻辑或
注:逻辑与、逻辑或是判断真假的,按位与、按位或是对二进制数进行操作的。对逻辑与操作,只要有一个为假,便不必再进行后边的计算;对逻辑或操作,只要有一个为真,便不必再进行后边的操作。 9:条件操作符exp1?exp2:exp3(exp1表达式的值为真,那么整个表达式的值为exp2,exp3不会进行求值;否则整个表达式的值为exp3,不会对exp2进行求值)
下面用例子说明它的用法,它其实实现了和if语句一样的功能。
10:逗号表达式
exp1,exp2,exp3,...expn
规则:逗号表达式从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
11:下表引用、函数调用和结构成员
(1)操作数:一个数组名+一个索引值
(2)函数调用操作符
接受一个或者多个操作符:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
(3)访问一个结构的成员
结构体.成员名
结构体指针->成员名(用于访问一个结构的成员)
eg:s.a(访问s结构体变量中a的成员)
注:当你拥有一个指向结构的指针而不是结构本身,且欲访问它的成员时,就需要用->操作符而不是.