我发现相同的mod操作会产生不同的结果,这取决于所使用的语言.

在Python中:

-1 % 10

生产9

在C中,它产生-1个!

  1. 哪一个是正确的模
  2. 如何使C中的mod操作与Python中的相同?

推荐答案

  1. 这两种变体都是正确的,但是在数学(特别是数论)中,Python的modulo是最常用的.
  2. 在C语言中,需要执行((n % M) + M) % M次才能得到与Python相同的结果.((-1 % 10) + 10) % 10.请注意,它如何仍然适用于正整数:((17 % 10) + 10) % 10 == 17 % 10,以及C实现的两种变体(正余数或负余数).

C++相关问答推荐

插入元素后,Sizeof操作符无法正常工作

理解没有返回语句的递归C函数的行为

如何解决C中的严格别名?

使用GOTO从多个嵌套循环C继续

为什么内核使用扩展到前后相同的宏定义?

C中函数类型的前向声明

文件权限为0666,但即使以超级用户身份也无法打开

实现简单字典时C语言中的段错误

如何在CANbus RX/TX FIFO起始地址寄存器(ATSAME 51)的特定地址初始化数组?

如何计算打印二叉搜索树时每行所需的空间?

#定义SSL_CONNECTION_NO_CONST

关于scanf()和空格的问题

将回调/基于事件的C API转换为非回调API

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

将size_t分配给off_t会产生符号转换错误

SSE 向量与 Epsilon 的比较

子进程不会修改父进程中的统计信息

为什么 C 字符串并不总是等同于字符数组?

C 中 struct 体自赋值是否安全?特别是如果一侧是指向 struct 的指针?

当 a 是代码块时使用逗号运算符 (a, b)