首页
学习
活动
专区
圈层
工具
发布

Utility之负数取模

最近在跟孩子学习表内除法,想到一个问题:C语言里怎样处理负数取模? 表内除法:12÷4=3 整数除法:13÷4=3…1 整数整除:13/4是等于3吗? 负数取模:-13%4等于多少?...明明除不尽,又要求结果是整数,一般有这样几种方法: 向上取整(Ceiling),即向+∞靠齐,也就是取比浮点数结果稍大的最小整数。...向下取整(Floor),即向-∞靠齐,也就是取比浮点数结果稍小的最大整数。那么:13/4=3;-13/4=-4;15/4=3;-15/4=-4。...向零取整(Truncate),即向0靠齐,也就是舍去小数部分。那么:13/4=3;-13/4=-3;15/4=3;-15/4=-3。...而C语言里的整除,采用的就是向零取整(Truncate)。 再来看取模。不管哪种整除操作,都会符合公式:被除数÷除数=商…余数,所以:余数=被除数-除数*商。

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++中负数取余的规则

    C++中负数取余的规则是向0取余,结果总是正数或零。 在C++中,负数取余的规则与正数取余的规则有所不同,下面我们来详细了解一下C++中负数取余的规则。...负数取余的定义 在C++中,负数取余的运算符是%,当两个整数进行取余运算时,如果被除数是负数,那么结果的符号与被除数的符号相同,也就是说,如果被除数是负数,那么结果也是负数;如果被除数是正数,那么结果也是正数...在进行负数取余运算时,如果被除数是负数,那么结果的符号与被除数的符号相同,也就是说,如果被除数是负数,那么结果也是负数;如果被除数是正数,那么结果也是正数。...在进行负数取余运算时,如果被除数和除数都是正数,那么结果的符号与被除数的符号相同,也就是说,如果被除数是正数,那么结果也是正数;如果被除数是负数,那么结果也是负数。...负数取余的结果是什么? 在C++中,负数取余的结果与被除数的符号相同,也就是说,如果被除数是负数,那么结果也是负数;如果被除数是正数,那么结果也是正数。 负数取余有什么应用?

    1.9K10

    【C除法和取余】除法和负数取余你真的会了吗?

    文章目录 除法(取整方式) 负数取余 除法(取整方式) 1....向0取整 我们编程中最常见的取整方式就是向0取整 画个数轴你就明白了 printf("%d\t%d\n",-7/2,7/2); 结果不出所料: 通过这个:你就可以在编程中快速求出一个数的除数...,就可以利用这个规则,减小自己的岁数 2.比如你是一名职场管理人士,你在写这个的年龄的时候,就可以利用这个规则,增大自己的岁数 负数取余 下面正数取余没什么特殊的地方,因此我们主要讲讲负数的取余 取余这块就没有像取整一样有那么多函数...,但是既然我把取余和取整放一块肯定有特别的意义,快和我一起看看吧!...=0) { a[len++]=n%2; n=n/2; } n是正数的话显然可以, 举个例子: 11%2商5余1,行 但是要是这个n是负数呐?

    2.6K60

    Verilog 中负数的 % 取余数运算、C语言、Matlab各自的取余数运算【%】【mod】【rem】

    Verilog 中的 % 取余数运算(取模),看到这个题目的时候还真不确定选哪个答案。 13. Verilog 中 -10%3 的结果是多少?...先去掉符号取余数,被除数是正数,则余数为正数;被除数为负数,则余数为负数。 ? Matlab 的 rem,求余数: r = rem(a, b),返回的 r 是 a 除以 b 后的余数。...这里特别注意 Matlab 中的 mod 取模运算,以前经常把 % 叫做取模,计算方式不一样。...-3) = -1,11 = (-4)*(-3) + (-1),商为 -4,余数为 -1 mod(-10 , -3)= -1,-10 = 3*(-3) + (-1),商为 3,余数为 -1 商尽量往小取,...当商为正数,就是数值越小越好,当商为负数,就往取绝对值后比较大的方向取,即都向着负无穷方向取。

    13.8K31

    int类型的取值范围(为什么负数比正数表示的范围多一位)

    前言: 还记得那个刚刚学习C语言,老师给我们讲课的时候,我就稍微了解一下为什么int类型的数据,负数可以表示到-2³¹,而正数只能表示到2³¹-1。...有符号类型的表示形式: ●有符号的类型,用第一位来表示符号位,1代表负数,0代表正数,其他31位就是用,表示数值,比特位只能放1和0。...正数的原码、反码、补码都相同。 负数从原码到反码是符号位不变,其他的取反,这里的取反就是,0变成1,1变成0,因为二进制里面只有0和1....负数从反码到补码:直接+1 -1的原码:1000 0000 | 0000 0000 | 0000 0000 | 0000 0001 -1的反码:1111 1111 | 1111 1111...-0:1000 0000 | 0000 0000 | 0000 0000 | 0000 0000 +0和-0,都是表示0,那么我们就没有必要用两个数共同来表示0,我们用+0表示0,用-0取表示其他的数

    2.6K00

    「硬核JS」数字之美

    我们可能注意到了,这样好像没办法表达负数 So,为了表示正与负,先辈们就发明了 「原码」,把左边第一位腾出来,存放符号,正数用 0 来表示,负用 1 来表示 上图就是正负数的 原码,你可能在疑惑为什么上面表里我只画到了数字...其实,已知补码求原码的操作就是对这个补码再求补码 如果补码的符号位为 0,表示是一个正数,那么它的原码就是它的补码 如果补码的符号位为 1,表示是一个负数,那就直接对这个补码再求一遍它的的补码就是它的原码...使用补码,我们可以很方便的将减法运算转化成加法运算,运算过程得到简化,正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值,采用补码进行运算,所得结果仍为补码 与原码、反码不同...,因为它是个无限循环小数,所以我们取最大 52 即可,剩余的就截断了,这样就会造成一定的精度损失,这也是为什么 JS 中 0.1 + 0.2 !...中数字范围 如果大家真的理解了上文,那么就会发现数字的范围其实有两个概念,最大正数和最小负数,最小正数和最大负数 而最终的数字范围即 最小负数~最大负数 并上 最小正数~最大正数 从S、E、M即数符、阶码

    7.3K20

    「硬核JS」令你迷惑的位运算

    整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数) 在 ECMAScript 中,所有整数字面量默认都是有符号整数 有符号整数也就是上文所说,二进制左侧首位是符号位来表明该数字正负...1000 00 11,即十进制 -3 同上所述 十进制数字 1 的按位非即十进制 -2 十进制数字 0 的按位非即十进制 -1 上面说的都是正数,我们看一个负数的例子 十进制数字 -1 由于是负数,上文我们说过计算机中二进制存储负数为补码方式...,如下所示 ~~3.14 == 3 很多人知道这样可以取整,但是由于不知道具体是为什么而不敢用,所以我们来解释下为什么它为什么可以取整 上面我们说过,在 JS 位运算中,并不会用 64 位来计算,它会先在后台把值转换为...,其实四舍五入也就那么回事了,即正数加 0.5,负数减 0.5 进行按位或取整即可,道理就是这么简单,如下 let a1 = 1.1 let a2 = 1.6 a1 + 0.5 | 0 // 1 a2...使用无符号右移 >>> 取整(正数) 无符号右移和有符号右移以及左移都差不多,移 0 位都可取整,只不过无符号右移只能支持正数的取整,至于原理,说过无数遍了,相信你已经记住了,如下 1.323 >>>

    2.5K20
    领券