取余操作的原理

您所在的位置:网站首页 二进制除法原理是什么 取余操作的原理

取余操作的原理

2024-07-07 22:34| 来源: 网络整理| 查看: 265

虽然以前学过,但是已经忘了,在返秦的火车上看到如此问题,于是思考了一下。

C是高级语言,a-(a整除b)*b就不用说了,“整除”是怎么来的?但相对于二进制运算,汇编也算一种“高级”语言,那么我问,“div”是怎么来的?

来看一个例子,如果除数的数是2的幂次的话:

除数2,二进制为0000 0010,被除数5,二进制为0000 0101。除数-1,即此时除数变为0000 0001,两者进行与操作,结果为0000 0001,余数为1。 除数4,二进制为0000 0100,被除数13,二进制为0000 1101。除数-1,即此时除数变为0000 0011,两者进行与操作,结果为0000 0001,余数为1。 除数8,二进制为0000 1000,被除数47,二进制为0010 1111。除数-1,即此时除数变为0000 0111,两者进行与操作,结果为0000 0111,余数为7。

原理明白了吧,但这种方法仅仅适用于除数为2的幂次数的时候。另,这种方法会出现在位图法的位向量操作中,看着是与操作,实际上就是取余。

#define MAX 1000000 #define SHIFT 5 #define MASK 0x1F #define DIGITS 32 int a[1+MAX/DIGITS]; //置指定位为1 void setbit(int n) { a[n>>SHIFT] |= (1SHIFT] &= ~(1SHIFT] & (1(除数*某个2的n1次)。。。。不停迭代,直至被除数0,所以商的最高位为1 -0011 1 //这一次不够减,所以商的次高位为0 除数继续右移 0010 01(00 1101) -0001 11 ---------------------------- {0000 10}(00 1101) //此时000010>0,所以商的第3高位为1 -0000 11 1 //此时100减111


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3