精华内容
下载资源
问答
  • 然而,如果 n 有可能为负数,而此时 h 也有可能为负,那么这样做就不一定总是合适 的了。不过,我们己知 h>-HASHSIZE,因此我们可以这样写: h = n % HASHSIZE; if(n ) h += HASHSIZE; 更好的做法是,程序在...

    假定我们让 a 除以 b,商为 q,余数为 r: q = a / b;

    r = a % b;

    这里,不妨假定 b 大于 0。

    我们希望 a、b、q、r 之间维持怎样的关系呢?

    1.最重的一点,我们希望 q * b + r == a,因为这是定义余数的关系。

    2.如果我们改变 a 的正负号,我们希望这会改变 q 的符号,但这不会改变 q  的绝对值。

    3.当 b>0 时,我们希望保证 r >= 0 且 r < b。例如,如果余数用于哈希表的索引,确保 它是一个有效的索引值很重 。

    这三条性质是我们认为整数除法和余数操作所应该具备的。很不幸的是,它们不可能同时成立。

    考虑一个简单的例子:3/2,商为 1,余数也为 1。此时,第 1 条性质得到了满足。(-3)/2 的值应该是多少呢?如果 满足第 2 条性质,答案应该是-1,但如果是这样,余数就必定是-1,这样第 3 条性质就无法满足了。如果我们首先满足第 3 条性质,即余数是 1,这种情况下根据第 1 条性质则商是-2,那么第 2 条性质又无法满足了。

    因此,C 语言或者其他语言在实现整数除法截断运算时,必须放弃上述三条原则中的至 少一条。大多数程序设计语言选择了放弃第 3 条,而改为 求余数与被除数的正负号相同。 这样,性质 1 和性质 2 就可以得到满足。大多数 C 编译器在实践中也都是这样做的。

    然而,C 语言的定义只保证了性质 1,以及当 a>=0 且 b>0 时,保证|r| < |b|以及 r>=0。 后面部分的保证与性质 2 或者性质 3 比较起来,限制性 弱得多。

    C 语言的定义虽然有时候会带来不需 的灵活性,但大多数时候,只要编程者清楚地知道要做什么、该做什么,这个定义对让整数除法运算满足其需要来说还是够用了的。例如,

    假定我们有一个数 n,它代表标识符中的字符经过某种函数运算后的结果,我们希望通过除 法运算得到哈希表的条目 h,满足 0<=h<HASHSIZE。又如果己知 n 恒为非负,那么我们只需要像下面一样简单地写:

    h=n%HASHSIZE:

    然而,如果 n 有可能为负数,而此时 h 也有可能为负,那么这样做就不一定总是合适 的了。不过,我们己知 h>-HASHSIZE,因此我们可以这样写:

    h = n % HASHSIZE;

    if(n < 0)

    h += HASHSIZE;

    更好的做法是,程序在设计时就应该避免 n 的值为负这样的情形,并且声明 n 为无符号数。

    测试代码:

    #include <stdio.h> 
    main()
    {
         int a=-3, b=2; 
         int q,r;
         q = a / b; 
         r = a % b;
         printf("q=%d, r=%d\n", q, r);
    }

     

     

    转载于:https://www.cnblogs.com/shijiezhenmei/p/3705803.html

    展开全文
  • C语言 负数取余的原理

    千次阅读 2015-03-23 23:26:00
    负数求余数运算是一个数学问题: 任何一个整数n都可以表示成 n=k*q+r 其中0<=|r|<|q| 这里的r就是n除以q的余数,即 r==n%q 例如: -9=(-2)*4+(-1) 则-9除以4的余数为-1 另外:求余:取整除后的余数。 ...

    负数求余数运算是一个数学问题:

    任何一个整数n都可以表示成 n=k*q+r 其中0<=|r|<|q|
    这里的r就是n除以q的余数,即 r==n%q
    例如: -9=(-2)*4+(-1) 则-9除以4的余数为-1

    另外:
    求余:取整除后的余数。
    求模:基本意义和求余相同,不过要求a%b中的b不是负数。

    转载于:https://www.cnblogs.com/tsw123/p/4361366.html

    展开全文
  • C语言旅途之简单运算

    2019-12-25 03:28:31
    求余运算就是求余数的运算,运算符为%,注意正数与负数的区别呦 ①、//代码摘下直接可以运行 #include<stdio.h> int main() { printf("%d,%d,%d,%d\n",13%2,-13%2,247%-58,-66%-15); return 0; } ②、结果展示...

    Ⅰ、简单的求余运算:
    求余运算就是求余数的运算,运算符为%,注意正数与负数的区别呦
    ①、//代码摘下直接可以运行
    #include<stdio.h>
    int main()
    {
    printf("%d,%d,%d,%d\n",13%2,-13%2,247%-58,-66%-15);
    return 0;
    }
    ②、结果展示:
    在这里插入图片描述
    Ⅱ、简单的算数运算(求根公式):
    你会发现在代码中会有#include<stdio.h>和#include<math.h>这两个是头文件,一般的printf与scanf操作会在第一个头文件中,而sqrt(d)函数的调用则需要第二个头文件;
    ①、//代码摘下直接可以运行
    #include<stdio.h>
    #include<math.h>
    int main()
    {
    float a,b,c,d,x1,x2,q;
    printf(“Please input a,b,c\n”);
    scanf("%f %f %f",&a,&b,&c);
    d=bb-4ac;
    q=sqrt(d);
    x1=(-b+q)/(2
    a);
    x2=(-b-q)/(2*a);
    printf(“a=%.2f,b=%.2f,c=%.2f,d=%.2f,x1=%.2f,x2=%.2f\n”,a,b,c,d,x1,x2);
    return 0;
    }

    /*a,b,c可输入值为:(假设有两个实根)
    1 1 -2
    1.5 2.5 -1.8
    2 2 -3
    /
    ②、结果展示:
    例如:输入:a=1,b=1,c=-2时的结果为:d与x的值如下所示;
    在这里插入图片描述
    Ⅲ、简单的混合运算:
    ①、//代码摘下直接可以运行
    #include<stdio.h>
    int main()
    {
    int a,b,c,d;
    a=2,b=5,c=6,d=10;
    a+=b;b-=c;
    c
    =d;d/=a;
    a%=c;a++;
    b–;
    –b;
    printf("%d,%d,%d,%d\n",a,b,c,d);
    return 0;
    }
    ②、结果展示:
    在这里插入图片描述

    ☺寄语:
    Ⅰ、此程序在Visual C++6.0版本上运行的;
    Ⅱ、如果我给的程序有问题,或在叙述方面有问题,或者看不懂我讲解的意思,请及时指出或留言和我讨论,谢谢各位大佬!!!
    Ⅲ、可能有的人不太理解,多去看看书,多敲代码,学计算机没有什么捷径就是多学多看,我的代码或其他的有问题请指出来,我一定会订正,推荐大家听听MOOC慕课的网课,确实特别好!

    展开全文
  • 关于求余运算C语言中,如果被除数为负值,则对一个正数求余的时候,求出的余数也是一个负数。在某些场合下,我们需要求出它的正余数,例如:在C语言中有(-11)%5=-1,但是如果我们希望得到的余数不是-1,而是4,...

    2020学习笔记:

    关于求余运算

    在C语言中,如果被除数为负值,则对一个正数求余的时候,求出的余数也是一个负数。在某些场合下,我们需要求出它的正余数,例如:在C语言中有(-11)%5=-1,但是如果我们希望得到的余数不是-1,而是4,那么如何计算呢?


    对于整型数a,b来说,取模运算或者求余运算的方法都是:

    1.求 整数商: c = a/b;

    2.计算模或者余数: r = a - c*b.

    求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入;而取模运算在计算c的值时,向负无穷方向舍入。

    所谓向0方向舍入,就是以小数点为界限,直接将小数部分去掉。如(Int)-1.324=-1(亦叫截断法);

    而向负无穷方向舍入,就是最终结果比真实值更小。如(Int)-1.324=-2;(int此处是强制转换数据类型)
    此处参考  :https://blog.csdn.net/StruggleShu/article/details/51099551


    以下是代码实现 :

    #include <stdio.h>
    int main()
    {
        int a, b, remainder;
        printf("Please Input Dividend and divisor :\n");
        scanf("%d %d", &a, &b);
        // 变量先定义后使用
        remainder = a%b;
        if(remainder<0)
        {
            remainder=a%b+b;
            // a ÷ b = q .... r
            // a ÷ b = (q - 1)...... r + b
        }
        printf("remainder = %d \n",remainder);
        return 0;
    }
    

    注意:变量一定要先定义后使用 在

    remainder = a%b;

    之前其中a与b都必须提前赋值 

     

    展开全文
  • C语言 取余

    万次阅读 2016-10-27 10:27:55
    通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算。在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的...
  • 算数运算

    2020-07-14 16:04:07
    C语言中,求余运算的结果的符号与被除数的符号是相同的;而除法运算中,被除数和除数有一个为负数,结果为负数 算术表达式的优先级 算术表达式的结合性 左结合 右结合 “()”优先级最高 实例 分离数位 问题...
  • 1、关于整数的除法和求余:  在执行除法运算的时候,如果操作数不同号,结果就是负数,比如:45/-7结果是-6 。 但是对于求模运算,其结果总是和左操作数的符号相同,不管右边的符号是什么,比如:45%-7结果是3 。-...
  • 负数除法与正数除法原理

    千次阅读 2015-07-26 17:58:08
    C语言中,负数除法运算与正数除法运算不一样,遵循原则有: (/)除号的正负取舍和一般的算数一样,符号相同为正,相异为负 (%)求余符号的正负取舍和被除数符号相同 -3/16 = 0 ; 16/-3 = -5; -3%...
  • 但由于省去了符号位,故不能表示负数。 下表列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。 类型说明符 数的范围 分配字节数 int -32768~32767 ■■ short int -32768~32767 ■■ signed int -...
  • 2. 算术运算

    2014-05-11 20:21:00
    2.1 C语言中的算术运算包括:加(+)、减(-)、乘(*)、除(/)和求余(%)。2.2注意:运算符/和%的特殊性:两个整数相除会去掉小数部分,例如:1/2 = 0 二不是0.5%的两个运算符必须是整数,如果不是整数将编译...
  • (10)编写一个程序实现如下功能:调用名为tj的函数,一个二维数组中正数、负数的代数和,以及零的个数。 (11)编写一个程序实现如下功能:调用一个名为gm的函数,该函数实现简单的加密。加密方法如下:先定义...
  • 1.python中的求模(求余运算 与C语言相同,其求模运算符同样为%,x对y取余数的表达式为:余数=x%y。看起来似乎没有什么变化,然而我们经过编译会发现一些有趣的事情: 当输出的结果为负数时,结果出错了。这是...
  • python中的取模%

    2020-03-21 14:35:19
           这周展开了对python的学习,...在C语言中,%符号表示的是求余运算,而在python脚本中,%表示的是取模。 (通常取模运算中除数不允许是负数,但是在python 2.5.1里可以在%后面...
  • 1、除法运算符‘/’ 按照常规数学计算的方式直接得出结果即可。 2、整除运算符‘//’ 1)如果被除数和除数均为正数或者均为负数,则和C语言这些编程语言一样,直接取商就行;...2)如果被除数或者除数...3、求余运算
  • 程序员二进制计算器 v1.36

    热门讨论 2014-07-16 16:21:43
    专为程序员打造的计算器,二进制运算强大,支持64位。 采用表达式驱动,输入表达式便即时显示结果,抛弃传统计算器繁琐的按钮,表达式可粘贴或回调重复使用。 支持二进制串直接运算,如0b1101 & 0b0011= 0b0001。 ...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    (1)在数据结构课程中,数据的逻辑结构,数据的存储结构及数据的运算之间存在着怎样的关系? (2)若逻辑结构相同但存储结构不同,则为不同的数据结构。这样的说法对吗?举例说明之。 (3)在给定的逻辑结构及其...
  • LINGO软件的学习

    2009-08-08 22:36:50
    可以把集、集成员和集属性同C语言中的结构体作个类比。如下图: 集 ←→ 结构体 集成员 ←→ 结构体的域 集属性 ←→ 结构体实例 LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些问题,然后再...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

c语言负数求余运算

c语言 订阅