C语言入门基础之运算符详解

????????关注后回复 “进群” ,拉你进程序员交流群????????

作者丨写代码的牛顿

来源丨编程学习总站

01

加减乘除运算符

  • 加减法运算符

我们先看一段代码演示加减法的使用。

#include <stdio.h>

int main()
{
    int num1 = 1;
    int num2 = 2;

    int num3 = num1 + num2;

    printf("num3 = %d\n", num3);

    int num4 = num1 - num2;

    printf("num4 = %d\n", num4);

    return 0;
}

输出结果是:

num3 = 3
num4 = -1

右边相加减的结果赋值给左边变量。

  • 除法运算符

看一段演示除法运算符代码

#include <stdio.h>

int main()
{
    int num1 = 1;
    int num2 = 2;

    int num3 = num1 / num2;
    int num4 = 2 * num2;

    printf("num3 = %d\n", num3);
    printf("num4 = %d\n", num4);

    return 0;
}

输出结果是:

num3 = 0
num4 = 4

从输出我们看到num3 = 0明显和我想要的结果不一样,而num4的结果完全符合我们的意料。

下面我们再看一段代码

#include <stdio.h>

int main()
{
    int num1 = 5;
    int num2 = 2;

    int num3 = num1 / num2;

    printf("num3 = %d\n", num3);

    return 0;
}

输出结果是:

num3 = 2

在代码里num3定义成一个整型(int),肯定不能存储小数,那么是因为num3是整型才会导致num3值只保留整数部分还是因为除法运算符"/"?我们再看一段代码,把num3定义成单精度浮点型(float),看看输出结果。

#include <stdio.h>

int main()
{
    int num1 = 1;
    int num2 = 2;

    float num3 = num1 / num2;
    int num4 = 2 * num2;

    printf("num3 = %f\n", num3);
    printf("num4 = %d\n", num4);

    return 0;
}

输出结果:

num3 = 0.000000
num4 = 4

输出结果依旧是0,说明不是因为num3的数据类型造成输出结果变化,是因为除法运算符"/",两个整型相除,结果则是商向下取整。我们知道除法运算不仅仅是2个整型的运算,还可以是浮点型和整型,浮点型和浮点型之间的运算。我们先看一段代码整型和浮点型之间的除法运算。

#include <stdio.h>

int main()
{
    int num1 = 1;
    float num2 = 2;

    float num3 = num1 / num2;
    float num4 = 2 * num2;

    printf("num3 = %f\n", num3);
    printf("num4 = %f\n", num4);

    return 0;
}

输出结果:

num3 = 0.500000
num4 = 4.000000

现在输出结果达到我们的想要了。那么现在我们看看除数和被除数两者都是浮点型呢?将会输出什么?先看这段代码

#include <stdio.h>

int main()
{
    float num1 = 1;
    float num2 = 2;

    float num3 = num1 / num2;
    float num4 = 2 * num2;

    printf("num3 = %f\n", num3);
    printf("num4 = %f\n", num4);

    return 0;
}

输出结果:

num3 = 0.500000
num4 = 4.000000

结果完全符合我们的预期。说明两个数相除,只要任意一方是浮点型,得到的结果就是浮点型,保留小数部分。

现在我们总结一下除法运算符的结果的不同之处。

  • 两个整数相除

结果是商向下取整

  • 两个数相除,任意一方是浮点型

结果是商保留整数部分和小数部分

  • 乘法运算符

乘法运算和除法运算结果有一个不同之处就是,乘法运算的结果不会发生截断,两个数都是整数,结果则是整数。两个数任意一方是浮点数,结果则是浮点数,但是我们通常情况下会遇到类似下面的代码。

#include <stdio.h>

int main()
{
    float num1 = 5.1;
    int num2 = 2;

    int num3 = num1 * num2;

    printf("num3 = %d\n", num3);

    return 0;
}

输出结果是:

num3 = 10

我们不是说两个数相乘任意一方是浮点型,结果则是浮点型吗?为什么小数点后面的数没了?其实这是发生了截断,在C语言里浮点型强制转换成整型会发生数据截断,小数部分被丢弃了。那么我们怎么知道数据发生了截断呢?看看下面这段代码我们就知道了。

#include <stdio.h>

int main()
{
    float num1 = 5.1;
    int num2 = 2;

    if((num1 * num2) == 10.2f){
        printf("good!\n");
    }

    return 0;
}

输出结果是:

good!

说明整型和浮点型相乘得到的结果是浮点型!这里要注意一下10.2f后面带有f表明将10.2转换成单精度浮点型,如果不带f则不会输出"good!"字符串。

02

求余运算符

在C语言里求余运算符是%,下面我们看一段代码。

#include <stdio.h>

int main()
{
    int num1 = 9, num2 = 5;

    int mod = num1 % num2;

    printf("mod = %d\n", mod);

    return 0;
}

输出结果:

mod = 4

在C语言里%只能对整型进行求余,任意一方是浮点型时,语法错误。

03

自增自减运算符

  • 自增运算符

在C语言里自增运算符使用++,而自减运算符使用--,下面我们用实际代码分别看看自增自减和常规的加减法有什么不一样。

#include <stdio.h>

int main()
{
    int num1 = 1;
    int num2 = 1;

    num1++; //后自增
    ++num2; //前自增

    printf("num1 = %d, num2 = %d\n", num1, num2);

    printf("num1 = %d, num2 = %d\n", ++num1, num2++);

    printf("num2 = %d\n", num2);

    return 0;
}

输出结果是:

num1 = 2, num2 = 2
num1 = 3, num2 = 2
num2 = 3

从输出结果我们可以知道,num1和num2第一次自增输出结果一样,说明前自增和后自增都可以对变量进行加1。那么第二次输出就有点不同了,虽然都进行了自增,但是num1输出3而num2输出2,最后一次输出num2则是3。这是因为前自增先对变量进行加1后再使用,而后自增则先使用变量再进行加1操作。

  • 自减法运算符

自增和自减法运算符运算过程一样,区别则是一个做加1操作另外一个做减1操作。

04

逗号运算符

首先我们看一段代码

#include <stdio.h>

int main()
{
    int num1 = 1, num2 = 2;

    int s = 1 + (num2 = num1 + 1, num2 = num1 + 2);

    printf("s = %d\n", s);

    return 0;
}

这段代码的输出结果是:

s = 4

从输出结果我们可以知道,逗号运算符是从左往右结合,先计算num2 = num1 + 1,此时num2 = 2,再计算num2 = num1 + 2,此时num2 = 3,最后取num2的最终值加1的结果赋值给s。

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击????卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值