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

    xiaoxiao2023-10-24  121

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

    3/4=?3%4=?3/-4=?3%-4=?-3/4=?-3%4=?-3/-4=?-3%-4=?

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

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

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

    #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; }

    程序结果为:

     

    最新回复(0)