¿Cómo podemos implementar el operador de módulo como una función en C sin usar el operador?Implementar el operador de módulo como una función en C
Respuesta
simple:
Si el cociente
a/b
es representable, la expresión(a/b)*b + a%b
será igual aa
(estándar C99, 6.5.5/6).
Haz una división entera seguida de una multiplicación y resta.
#include <stdio.h>
int main()
{
int c=8, m=3, result=c-(c/m*m);
printf("%d\n", result);
}
Aquí van:
a % b = a - (b * int(a/b))
Esa notación de conversión solo funciona en C++ (no en C, de lo que se trata la pregunta) y es superflua si a y b son enteros. Pero el voto a favor vino de otro lado. –
@JonathanLeffler, ¿pueden explicarme qué no funciona en C. – user674669
@ user674669: en C tendrían que escribir '(int) (a/b)'. La notación tipo-función 'int (a/b)' es específica de C++. –
Usted puede simular x % y
restando repetidamente y
de x
y hacer el seguimiento de los resultados. En cada iteración, si el resultado es menor que y
, tiene el resto y puede devolverlo.
Esto puede ser lento pero útil si la computadora no tiene capacidades de multiplicación/división. – user674669
Así no funcionan las implementaciones de software real. Una implementación de software real doblaría el segundo operando hasta que otra duplicación lo hiciera mayor que el primero, restara, y luego comenzara dividiendo el segundo operando por dos y restando. – EJP
Dividendo/Divisor = Cociente
La fórmula (en Python 3) es a continuación:
Modolus = Divident - dividendo // Divisor * Divisor
Por ejemplo si el dividendo = 5, y el Divisor = 2, entonces
Módulo = 5 - 5 // 2 * 2 que se convierte en 5 - 2 * 2 5 - 4 Recuerde que // tiene h igher precedencia que -, entonces 5 // 2 es evaluado primero.
¿En qué se diferencia de @fbrereto answer? – prasun
Es solo un idioma diferente, le expliqué algunas cosas para que la fórmula sea más clara. Utilicé Python 3. Si tiene acceso a Python 3, tipee. Una vez que lo ejecuta en Python, es fácil hacer lo mismo en su idioma favorito. –
@prasun La singularidad no es un requisito en SO. – EJP
- 1. operador módulo en C Objetivo
- 2. C# operador módulo
- 3. ¿Por qué el operador% se conoce como el operador "módulo" en lugar del operador "restante"?
- 4. Operador como puntero de función
- 5. Operador/función equivalente módulo/módulo en plantillas django?
- 6. cómo llamar a un operador como función en C++
- 7. Error de C# en Operador de módulo%
- 8. ¿Cómo implementar un SQL como el operador 'LIKE' en java?
- 9. Operador de módulo en Objective-C devuelve el resultado incorrecto
- 10. operador de conversión como función independiente
- 11. ¿Cómo funciona el operador de módulo?
- 12. Operador de módulo en Python
- 13. ¿Cómo implementar lambda como una función llamada "lambda" en Clojure?
- 14. Cómo implementar el operador ternario en el DLR
- 15. Punteros de función en el operador de dirección C "innecesarios"
- 16. desbordamiento sin signo con operador de módulo en C
- 17. ¿Cómo implementar una verdadera función de canalización en C#?
- 18. Reconociendo cuándo usar el operador de módulo
- 19. Implementar operador de conversión para el puntero
- 20. ¿Cuáles son las mejores prácticas para implementar el operador == para una clase en C#?
- 21. ¿Cómo implementar una función "privada/restringida" en C?
- 22. Cómo implementar el operador de mod en el ensamblado
- 23. Operador de módulo Perl pregunta
- 24. ¿Pasar un operador a una función?
- 25. cómo implementar el operador de tubería directa F # en R?
- 26. ¿Cómo funciona el operador "&" en una función de PHP?
- 27. C++: Usando operador de dos tipos intrínsecos como objeto de función
- 28. C# en el operador-sobrecarga
- 29. C: ¿hay una "evaluación diferida" cuando se usa el operador &&, como en C++?
- 30. Usando == operador sobrecargado en una función genérica
Esto no responde directamente a la pregunta, es meramente una definición axiomática del operador% (y por lo tanto no realmente "simple"). Me pregunto el número de votos para esto. – Clifford
@Clifford: Tal vez porque con una transformación obvia (restar '(a/b) * b' de ambos lados) se convierte en una fórmula para determinar' a% b'? – caf
@caf: Tal vez, pero "simple" hubiera sido presentar la transformación "obvia" en lugar de asumir que el lector posee las habilidades matemáticas (aunque básicas). La capacidad matemática de OP es desconocida; asumir que es obvio puede lucir como presumiendo. – Clifford