gpt4 book ai didi

c++ - 如何在处理负数的 C/C++/Obj-C 中编写模 (%) 运算符

转载 作者:IT老高 更新时间:2023-10-28 12:03:27 24 4
gpt4 key购买 nike

我最讨厌 C 派生语言(作为一名数学家)是这样的

(-1) % 8 // comes out as -1, and not 7

fmodf(-1,8) // fails similarly

什么是最好的解决方案?

C++ 允许模板和运算符重载的可能性,但对我来说,这两者都是混水。收到的例子很感激。

最佳答案

首先我想指出,您甚至不能依赖 (-1) % 8 == -1 的事实。您唯一可以依赖的是 (x/y) * y + ( x % y) == x。然而,余数是否为负是实现定义的

引用:C++03 第 5.6 段第 4 条:

The binary / operator yields the quotient, and the binary % operator yields the remainder from the division of the first expression by the second. If the second operand of / or % is zero the behavior is undefined; otherwise (a/b)*b + a%b is equal to a. If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined.

这里它遵循一个处理两个负操作数的版本,以便从 divisor 中减去 remainder 的结果可以从 dividend 所以它将是实际分区的 floormod(-1,8) 结果为 7,而 mod(13, -8) 为 -3。

int mod(int a, int b)
{
if(b < 0) //you can check for b == 0 separately and do what you want
return -mod(-a, -b);
int ret = a % b;
if(ret < 0)
ret+=b;
return ret;
}

关于c++ - 如何在处理负数的 C/C++/Obj-C 中编写模 (%) 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com