是否有可能通过使用纯位加法,减法除以10的无符号整数,也许繁衍?使用资源非常有限且速度慢的处理器.
我需要找出一个数字是否可以被3整除而不使用%,/或者*.给出的提示是使用atoi()函数.知道怎么做吗?
在我的程序中,我使用了很多整数除以10 ^ x和整数mod函数10.
例如:
unsigned __int64 a = 12345;
a = a / 100;
....
Run Code Online (Sandbox Code Playgroud)
要么:
unsigned __int64 a = 12345;
a = a % 1000;
....
Run Code Online (Sandbox Code Playgroud)
如果我要使用正确的位移>>,那么我将获得模式2^x,这不是我想要的.
有什么办法可以加速整数除法和mod函数的程序吗?
如果操作数是2的幂,则可以在没有模数运算符或除法的情况下容易地获得数字的模数.在这种情况下,下面的公式成立:x % y = (x & (y ? 1)).在许多架构中,这通常很有效.可以这样做mod 31吗?
int mod31(int a){ return a % 31; };
Run Code Online (Sandbox Code Playgroud) 假设我们得到一个无符号整数.并且不使用任何算术运算符,+ - / *或者%,我们要找到x mod 15.我们可以使用二进制位操作.
据我所知,我得到了2分.
a = a mod 15 = a mod 16 对于 a<15
让我们a = x mod 15
再a = x - 15k(对于一些非负k).
即a = x - 16k + k......
即 a mod 16 = ( x mod 16 + k mod 16 ) mod 16
即 a mod 15 = ( x mod 16 + k mod 16 ) mod 16 …
如果必须计算给定int值的一小部分,请说:
int j = 78;
int i = 5* j / 4;
Run Code Online (Sandbox Code Playgroud)
这比做的更快:
int i = 1.25*j; // ?
Run Code Online (Sandbox Code Playgroud)
如果是,是否存在可用于决定使用哪个转换因子的转换因子,例如int可以在同一时间内进行多次除法一次float乘法?
编辑:我认为评论清楚表明浮点数学会慢一点,但问题是,多少?如果我需要float用$ N $ intdiv 替换每个乘法,那么$ N $将不再值得吗?