在 C 语言程序中,数据可以参与很多种数学运算,比如简单的加、减、乘、除运算,稍微复杂的比较大小、逻辑运算、位运算等。
C 语言提供了很多种运算符,大致可以将它们分成以下几类。
1、算术运算符
算术运算符 | 含 义 | 举 例 |
---|---|---|
+ | 加法运算符 | a + b,计算 a 加 b 的和。 |
– | 减法运算符 | a – b,计算 a 减 b 的差。 |
* | 乘法运算符 | a * b,计算 a 乘 b 的乘积。 |
/ | 除法运算符 | a / b,计算 a 除以 b 的商。 |
% | 取余运算符 | a % b,计算 a 除以 b 的余数。 |
注意:
- C 语言中的乘法运算符是
*
,而不是×
; - C 语言中的除法运算符是
/
,而不是÷
。两个整数相除的结果为整数,直接舍弃小数部分。只要被除数和除数中有一个是小数,最终结果就是小数; - 使用
%
取余运算符时,要求左右两个操作数必须是整数。
举个例子:
#include <stdio.h>
int main()
{
int n = 5, m = 3;
printf("n+m=%d\n", n + m);
printf("n-m=%d\n", n - m);
printf("n*m=%d\n", n * m);
printf("n/m=%d\n", n / m);
printf("n%%m=%d", n % m);
return 0;
}
运行结果为:
n+m=8
n-m=2
n*m=15
n/m=1
n%m=2
2、关系运算符
关系运算符 | 含 义 | 举 例 |
---|---|---|
< | 小于运算符 | a<b,如果小于关系成立,结果为 1;反之,结果为 0。 |
<= | 小于等于运算符 | a<=b,如果小于等于关系成立,结果为 1;反之,结果为 0。 |
> | 大于运算符 | a>b,如果大于关系成立,结果为 1;反之,结果为 0。 |
>= | 大于等于运算符 | a>=b,如果大于等于关系成立,结果为 1;反之,结果为 0。 |
== | 等于运算符 | a==b,如果等于关系成立,结果为 1;反之,结果为 0。 |
!= | 不等于运算符 | a!=b,如果不等于关系成立,结果为 1;反之,结果为 0。 |
注意,等于运算符用==
表示,而不是=
,后者是赋值运算符。
举个例子:
#include <stdio.h>
int main()
{
int n = 5, m = 3;
printf("n<m 的结果为 %d\n", n < m);
printf("n<=m 的结果为 %d\n", n <= m);
printf("n>m 的结果为 %d\n", n > m);
printf("n>=m 的结果为 %d\n", n >= m);
printf("n==m 的结果为 %d\n", n == m);
printf("n!=m 的结果为 %d\n", n != m);
return 0;
}
运行结果为:
n<m 的结果为 0
n<=m 的结果为 0
n>m 的结果为 1
n>=m 的结果为 1
n==m 的结果为 0
n!=m 的结果为 1
3、赋值运算符
赋值运算符 | 用 法 |
---|---|
= | a=b,将 b 的值赋给 a。 |
+= | a+=b,等价于 a=a+b,将 a+b 的和赋值给 a。 |
-= | a-=b,等价于 a=a-b,将 a-b 的差赋值给 a。 |
*= | a*=b,等价于 a=a*b,将 a*b 的乘积赋值给 a。 |
/= | a/=b,等价于 a=a/b,将 a/b 的商赋值给 a。 |
%= | a%=b,等价于 a=a%b,将 a%b 的余数赋值给 a。 |
举个例子:
#include <stdio.h>
int main()
{
int a = 1, b = 2;
a += b;
printf("a=%d,b=%d\n", a, b);
a -= b;
printf("a=%d,b=%d\n", a, b);
a *= b;
printf("a=%d,b=%d\n", a, b);
a /= b;
printf("a=%d,b=%d\n", a, b);
a %= b;
printf("a=%d,b=%d", a, b);
return 0;
}
运行结果为:
a=3,b=2
a=1,b=2
a=2,b=2
a=1,b=2
a=1,b=2
4、逻辑运算符
逻辑运算符 | 含 义 | 举 例 |
---|---|---|
&& | 逻辑与运算符 | a&&b,如果 a 和 b 都为非 0 数,那么结果为 1;反之,结果为 0。 |
|| | 逻辑或运算符 | a||b,只要 a 和 b 中至少有一个为非 0 数,那么结果为 1;反之,结果为 0。 |
! | 逻辑非运算符 | !a,如果 a 为非 0 数,那么结果为 0;如果 a 为 0,那么结果为 1。 |
举个例子:
#include <stdio.h>
int main()
{
//测试逻辑与运算符
printf("5&&3 的结果为%d\n", 5 && 3);
printf("5&&0 的结果为%d\n", 5 && 0);
printf("0&&3 的结果为%d\n", 0 && 3);
printf("0&&0 的结果为%d\n", 0 && 0);
//测试逻辑或运算符
printf("5||3 的结果为%d\n", 5 || 3);
printf("5||0 的结果为%d\n", 5 || 0);
printf("0||3 的结果为%d\n", 0 || 3);
printf("0||0 的结果为%d\n", 0 && 0);
//测试逻辑非运算符
printf("!5 的结果为%d\n", !5);
printf("!0 的结果为%d", !0);
return 0;
}
运行结果为:
5&&3 的结果为1
5&&0 的结果为0
0&&3 的结果为0
0&&0 的结果为0
5||3 的结果为1
5||0 的结果为1
0||3 的结果为1
0||0 的结果为0
!5 的结果为0
!0 的结果为1
5、位运算符
无论哪种类型的数据,都是以二进制数的形式存储在内存中。例如,在char a = 5;
中,整数 5 对应的二进制数是0000 0101
,它在内存中就是这样存储的。
所谓位运算,指的是对内存中存储的每个二进制数进行运算。C语言提供了下表所示的几种位运算符,它们共同的特点是:只能操作整数对应的二进制位。
位逻辑运算符 | 用 法 |
---|---|
~ | 按位取反运算符,将每个二进制位上的 1 变为 0,将 0 变为 1。 |
& | 按位与运算符,对两个整数的各个二进制位做与运算。 |
| | 按位或运算符,对两个整数的各个二进制位做或运算。 |
^ | 按位异或运算符,对两个整数的各个二进制位做异或运算。 |
移位运算符 | 用 法 |
<< | 左移运算符,将所有二进制数向左移动,右侧空出的二进制位用 0 填充,左侧移出的二进制数直接丢弃。 |
>> | 右移运算符,将所有二进制数向右移动,左侧补 0 或 1。如果最左侧的值是 0,那么就补 0;如果最左侧是 1,那么就补 1。 |
说明:
- 按位与运算的规则是:参与
&
运算的两个二进制位,值都为 1 时,计算结果才为 1;反之,结果为 0。 - 按位或运算的规则是:参与
|
运算的两个二进制位,有一个值为 1,计算结果就为 1;反之,如果两个都是 0,结果为 0。 - 按位异或运算的规则是:参与
^
运算的两个二进制位,值不同时结果为 1,相同时结果为 0。
举个例子:
#include <stdio.h>
int main() {
char num1 = 0x95; //1001 0101
char num2 = 0x23; //0010 0011
printf("%hhX\n", num1 & num2); //0000 0001
printf("%hhX\n", num1 | num2); //1011 0111
printf("%hhX\n", num1 ^ num2); //1011 0110
printf("%hhX\n", ~num1); //0110 1010
printf("%hhX\n", num1 >> 2); //1110 0101
printf("%hhX\n", num2 << 2); //1000 1100
return 0;
}
仅有某些编译器支持以%hhX
十六进制的格式输出 char 类型的数,例如在 Visual Studio 上,程序的运行结果为:
1
B7
B6
6A
E5
8C
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧