C语言运算符

C语言运算符

0500

在 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
喜欢就支持一下吧
点赞0赞赏
分享
评论 抢沙发
HarryPotter的头像|艾奇编程网

昵称

取消
昵称表情