1.关系运算符
> < <= >= == !=
表达式1 > 表达式2 // 判断是否大于,真为1,假为0
表达式1 < 表达式2 // 同上,判断是否小于
表达式1 >= 表达式2 // 同上,判断是否大于等于
表达式1 <= 表达式2 // 同上,判断是否小于等于
表达式1 == 表达式2 // 同上,判断是否相等
表达式1 != 表达式2 // 同上,判断是否不相等
eg:
int a=1,b=2,c=3,d1,d2,d3,d4;
d1 = (a < b);
d2 = (a >= b);
d3 = (a+b == c);
d4 = (a+b != c);
上述代码中,d1=1,d2=0,d3=1,d4=0。
2.赋值运算符
= += -=
int a = 1; //把1赋值给a
a+=;//a=a+1
a-=;//a=a-1
3.算术运算符
/ * + - % ++ - -
直接看代码。
int a=1,b=2,c,d,e;
c = b/a; // c=2 注:结果取整
c = b*a; // c=2
c = b+a; // c=3
c = b-a; // c=1
c = a%b; // 取余 c=1
c = b%a; // c=0
a++;++b; // a=2 b=3
注意a++ 和++a的区别,++在前时,用a前先自加,反之用a后再自加,例如
int a=3,b,c;
b = a++;// a先赋值,再自加
c = ++a;// a先自加,再赋值
printf("%d %d %d",a,b,c);
输出结果为:5 4 5
那如果是 printf(“%d %d %d”,a++,++b,–c);呢?
则输出结果为:5 5 4
4.逻辑运算符
&& || !
&& 逻辑与
|| 逻辑或
! 逻辑非
表达式1 && 表达式2 截断法则:有一个为假,结果就为假;前一个为假,后面的表达式就不运算
表达式1 || 表达式2 截断法则:有一个为真,结果就为真;前一个为真,后面的表达式就不运算
!(表达式1 || 表达式2 ) 对布尔值进行取反
eg:
int a=1,b=2,c=3,d=4,e;
e = (a>2 && b++); //此时的e=0,结果为假,后面表达式不执行
e = (c<=3 || --d);//此时的e=0,结果为真,后面表达式不执行
e = !(c<=3 || --d);//e=1,结果为真,但--d仍不执行
e = (c<=3 || a<=1 && b==1);//此时的e值为1
注意:同时出现||和&&时,先算&&
5.sizeof运算符
int aaa = sizeof(数据类型);//写法一
float x;
int bbb = sizeof(x);//写法二
6.三目运算符
格式:
表达式1?表达式2:表达式3;
含义:判断表达式1的值是否成立,如果成立,将表达式2的值作为整个表达式的值,反之将表达式
3的值作为整个表达式的值。
int a=1,b=2,c=3,e;
e = (a==1?b:++c);
printf("%d %d",e,c);
输出结果:
2 3
说明表达式3也是不运行的。
7.逗号运算符
格式:
(表达式1,表达式2,表达式3…表达式n)
依次运行,并把最后一个表达式的值整体表达式的值。
int a=1,b=2,c=3,d=4;
a =(b+c,b+d,d+d);
printf("%d",a);
输出结果:
8
注意:
- 必须依次计算,防止前面表达式改变了表达式n中的变量
- 逗号表达式的优先级最低,因此在使用的时候需要加上括号
8.位运算符
& | ~ ^ << >>
&按位与 | 按位或
针对的是二进制数的运算,原理和逻辑与、逻辑或一样。
1000 0010
1100 1111 (按位与)&
1000 0010 //结果
1000 0010
1100 1111 (按位或)|
1100 1111 //结果
~ 运算符
含义:0变1 1变0
~(1101 1010) = 0010 0101
^ 运算符
含义:相同为0,不同为1
1000 0010
^ 1100 1111
结果:0100 1101
<< 左移运算符
- 无符号数
只有正数,没有符号位(原码、反码、补码都一样)
高位丢弃,低位补0。
将1左移2位:
0000 0001 —> 0000 0100 值为4
- 有符号数
有正数有负数,有符号位
高位丢弃,不论正数还是负数,低位补0
将-1左移两位
原码:1000 0001 反码:1111 1110 补码:1111 1111 —> 1111 1100
移后的反码:1111 1011 原码:1000 0100 值为-4
>> 右移运算符
- 无符号数
只有正数,没有符号位(原码、反码、补码都一样)
低位丢弃,高位补0
将8右移2位
0000 1000 —> 0000 0010 值为2
- 有符号数
有正数有负数,有符号位
符号位不变,低位丢弃,正数高位补0,负数高位补1
将-8右移2位
原码:1000 1000 反码:1111 0111 补码:1111 1000 移后
补码:1111 1110 反码:1111 1101 原码:1000 0010 值为-2