c语言除法计算和取模计算

下面的题目你可以全部都做对么:

  1. 3/4=?
  2. 3%4=?
  3. 3/-4=?
  4. 3%-4=?
  5. -3/4=?
  6. -3%4=?
  7. -3/-4=?
  8. -3%-4=?

如果你无法全部准确的做出请看下面的解答

除法的取整分类
除法的取整分为三类:向上取整、向下取整、向零取整。
1、向上取整:向+∞方向取最接近精确值的整数。在这种取整方式下,6/5=2 6/(-5)=-1 6/4=2 6/(-3)=-2
2、向下取整:向-∞方向取最接近精确值的整数。在这种取整方式下,6/5=1 6/(-5)=-2 6/4=1 6/(-3)=-2
3向零取整:向0方向取最接近精确值的整数,就是舍去小数部分,因此又称截断取整。在这种取整方式下,6/5=1 6/(-5)=-1 6/4=1 6/(-3)=-2
C语言使用向零取整方式,知道如何取整,我们就可以知道如何取模了

有符号之间的出具处理例程如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/time.h>
#include <assert.h>
//int:4
//long int :8
int main(void)
{
    int i,j,k;
    int ret;

    i = 3;
    j = 4;
    k = 5;
    ret = i % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i % k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = k % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = k / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    printf("************************** \n");

    i = 3;
    j = -4;
    k = -5;
    ret = i % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i % k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    printf("************************** \n");

    i = -3;
    j = 4;
    k = 5;
    ret = i % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i % k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    printf("************************** \n");

    i = -3;
    j = -4;
    k = -5;
    ret = i % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i % k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    printf("************************** \n");

	return 0;
}

结果如图所示:

有符号和无符号之间的处理:

        对于无符号和有符号之间的除法运算,首先会将有符号的数据转换为无符号的数据进行处理,在计算机中负数是用补码表示的,所以需要将负数转换为补码之后进行计算,转换方法可以参考博客https://blog.csdn.net/qq_37600027/article/details/83961882

有符号和无符号数据之间的例程如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/time.h>
#include <assert.h>
//int:4
//long int :8
int main(void)
{
    int ret,j,k;
    unsigned int i;

    i = 3;
    j = 4;
    k = 5;
    ret = i % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i % k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = k % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = k / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    printf("************************** \n");

    i = 3;
    j = -4;
    k = -5;
    ret = i % j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i % k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / j;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = i / k;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    printf("************************** \n");


    ret = k % i;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    ret = k / i;
    printf("%s %d %d \n",__func__,__LINE__,ret);
    printf("************************** \n");

	return 0;
}

程序结果为:

 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值