C 语言运算符
算术运算符
+
:正值运算符 / 加法运算符
int x = 4 + 22;
-
:负值运算符 / 减法运算符
int y = 61 - 23;
*
:乘法运算符
int num = 5;
printf("%i\n", num * num); // 输出 25
/
:除法运算符
C 语言里面的 整数除法 是整除,只会返回整数部分,丢弃小数部分。
创新互联公司自2013年创立以来,是专业互联网技术服务公司,拥有项目网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元石龙做网站,已为上家服务,为石龙各地企业和个人服务,联系电话:18980820575
float x = 6 / 4;
printf("%f\n", x); // 输出 1.000000
如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数。
float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%f\n", x); // 输出 1.
%
:取模运算符
返回两个整数相除的余数,这个运算符只能用于整数,不能用于浮点数。
int x = 6 % 4; // 2
负数求模的规则是,结果的正负号由第一个运算数的正负号决定。
11 % -5 // 1
-11 % -5 // -1
-11 % 5 // -1
++
:自增运算符
++var
是先执行自增操作,再返回操作后var
的值;var++
则是先返回操作前var
的值,再执行自增操作。
int i = 42;
int j;
j = (i++ + 10); // i: 43 j: 52
j = (++i + 10) // i: 44 // j: 54
--
:自减运算符
--var
是先执行自减操作,再返回操作后var
的值;var++
则是先返回操作前var
的值,再执行自减操作。
关系运算符
>
大于运算符<
小于运算符>=
大于等于运算符<=
小于等于运算符==
相等运算符!=
不相等运算符
关系表达式通常返回0
或1
,表示真伪。0
表示伪,所有非零值表示真。比如,20 > 12
返回1
,12 > 20
返回0
。
注意,不要将相等运算符 ==
写成 =
。
// 这个式子表示对变量 x 赋值 3,它的返回值为 3,所以 if 判断总是为真。
// 为了防止出现这种错误,可以将变量写在等号的右边。
if (x = 3) {}
多个关系运算符不宜连用。
i < j < k
,通常达不到想要的结果,不是保证变量j
的值在i
和k
之间,实际执行的是 (i < j) < k
逻辑运算符
对逻辑运算符来说,任何非零值都表示真,零值表示伪。如,5 || 0
返回1
,5 && 0
返回0
。
&&
:短路与运算符(两侧的表达式都为真,则为真,否则为伪)。
如果左边的表达式为伪,就不再对右边的表达式求值。
if (x < 10 && y > 20)
printf("Doing something!\n");
||
:短路或运算符(两侧至少有一个表达式为真,则为真,否则为伪)。
如果左边的表达式为真,就不再对右边的表达式求值。
!
:非运算符(改变单个表达式的真伪)。
位运算符
~
:按位取反
将值的二进制按位变成相反值,0 变成 1,1 变成 0,符号位(首位)参与运算。
// 0000 0010
char a = 2;
// 1111 1101,负数补码符号位不变,其他位取反加 1,得原码 1000 0010,结果为 -3
char b = ~ a;
&
:与运算
将两个值的二进制按位进行比较,返回一个新值,当两个二进制位都为 1,就返回 1,否则返回 0,符号位(首位)参与运算,与运算符 & 可以与赋值运算符 = 结合,简写成 &= 。
char a = -2; // 1111 1110
char b = 1; // 0000 0001
char c = a & b; // 0000 0000,结果为 0
|
:或运算
将两个值的二进制按位进行比较,返回一个新值,当两个二进制位都为 0,就返回 0,否则返回 1,符号位(首位)参与运算,或运算符 | 可以与赋值运算符 = 结合,简写成 |=。
char a = -2; // 1111 1110
char b = 1; // 0000 0001
// 1111 1111,负数补码符号位不变,其他位取反加 1,得原码 1000 0001,结果为 -1
char c = a | b;
^
:异或运算
将两个值的二进制按位进行比较,返回一个新值,当两个二进制位不同时,就返回 1,否则返回 0,符号位(首位)参与运算,异或运算符 ^可以与赋值运算符 = 结合,简写成 ^=。
char a = -2; // 1111 1110
char b = 1; // 0000 0001
// 1111 1111,负数补码符号位不变,其他位取反加 1,得原码 1000 0001,结果为 -1
char c = a ^ b;
<<
:左移运算
将左侧运算数的二进制向左移动指定的位数,头部无法容纳的值丢弃,尾部空出来的位置使用 0 填充,符号位(首位)参与运算,左移运算符 << 可以与赋值运算符 = 结合,简写成 <<=。
char a = 1; // 0000 0001
a = a << 2; // 0000 0100,结果为 4
char b = 33; // 0010 0001
// 1000 0100,负数补码符号位不变,其他位取反加 1,得原码 1111 1100,结果为 -124
b = b << 2;
>>
:右移运算
将左侧运算数的二进制向右移动指定的位数,尾部无法容纳的值丢弃,头部空出来的位置,使用符号位
填充。
右移运算符最好不要用于负数,因为不同系统对于右移后如何处理负数的符号位,有不同的做法,可能会得到不一样的结果。
右移运算符 >> 可以与赋值运算符 = 结合,简写成 >>=。
char a = 4; // 0000 0100
a = a >> 2; // 0000 0001,结果为 1
运算符优先级
部分运算符的优先级顺序(按照优先级从高到低排列)。
- 圆括号(
()
) - 自增运算符(
++
),自减运算符(--
) - 一元运算符(
+
和-
) - 乘法(
*
),除法(/
) - 加法(
+
),减法(-
) - 关系运算符(
<
、>
等) - 赋值运算符(
=
)
如果两个运算符优先级相同,则根据运算符是左结合,还是右结合,决定执行顺序。大部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符(=
)。
参考: C 语言教程
文章名称:C 语言运算符
地址分享:http://hbruida.cn/article/dsoigic.html