1、算数操作符
加+,减-,乘*,除/,取余%
2、移位操作符(>> <<)
左移操作符<<
规则:转化为补码进行移动,左边抛弃、右边补0(左移n位就是把原数值*2的n次方)
正数示例
#include<stdio.h>
void main()
{
int a = 2;
int b = a << 1;
printf("%d\n", b);
}
//输出结果b为4
如示例中的2可以表示为
00000000000000000000000000000010
左边抛弃最开始的0右边再补上0
00000000000000000000000000000100
转为十进制就得到4
负数示例
#include<stdio.h>
void main()
{
int a = -10;
int b = a << 1;
printf("%d\n", b);
}
输出结果b为-20
右移操作符>>
规则:(右移有两种)
- 算数右移:右边丢弃,左边补原符号位
- 逻辑右移:右边丢弃,左边补0
3.位操作符——按(二进制)位操作
将两个数化为二进制,再进行操作
操作数必须为整数
&--按二进制位与(对应的两个二进制位都取1时,得1,否则取0)
int a=3;
int b=5;
int c=a&b;
则c=1
a的二进制数位为00000000000000000000000000000011
b的二进制数位为00000000000000000000000000000101
c的二进制数位为00000000000000000000000000000001
|--按二进制位与(对应的两个二进制位都取0时,得0,否则取1)
int a=3;
int b=5;
int c=a|b;
则c=7
a的二进制数位为00000000000000000000000000000011
b的二进制数位为00000000000000000000000000000101
c的二进制数位为00000000000000000000000000000111
^--按二进制位异或(对应的两个二进制位相同时取0,不相同时取1)
int a=3;
int b=5;
int c=a^b;
则c=6
a的二进制数位为00000000000000000000000000000011
b的二进制数位为00000000000000000000000000000101
c的二进制数位为00000000000000000000000000000110
3.赋值操作符
= += -= *= /= &= |= >>= <<=
a=a+6与a+=6相同
其余的操作符同理
4.单目操作符(只对一个数进行运算)
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 求操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 前置、后置-- |
++ | 前置、后置++ |
* | 间接访问操作符 |
(类型) | 强制类型转换 |
! 逻辑反操作
int main()
{
int a = 5;
printf("%d\n", !a);
a = 0;
printf("%d\n", !a);
return 0;
}
输出结果为0 1
在C语言中,0代表假,非0代表真
!将假变成真,将真变成假。
~ 操作符
对一个数的补码进行按位取反(包括符号位)
++或--操作符
int main()
{
int a = 10;
int b = a++;
printf("%d %d\n", a, b);
return 0;
}
结果为11 10
int main()
{
int a = 10;
int b = ++a;
printf("%d %d\n", a, b);
return 0;
}
结果为11 11
当++前置时,先进行a=a+1,再进行b=a,
当++后置时,先进行b=a,再进行a=a+1,
--同理。
sizeof 求操作数的类型长度(以字节为单位)
sizeof是操作符,括号中表达式不参与计算
5.关系操作符
>= > <= < !=(用于测试不相等) ==(用于测试相等)
6.逻辑操作符
&& 逻辑与 一假为假
|| 逻辑或 一真为真
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
if (a || b)
{printf("1");}
else
{printf("0");}
return 0;
}
若输入5 5,结果为1
若输入5 0,结果为1
若输入0 0,结果为0
7.条件操作符(三目操作符)
exp1 ? exp2 : exp3
相当于
if (exp1)
{exp2}
else
{exp3}