tratando de encontrar valor absoluto y pensé que había una forma simple de invertir el signo con '~' o algo así.¿no hay un operador en c que cambie el signo de un flotación int, etc. de negativo a positivo o viceversa?
Respuesta
float newValue = oldValue * -1;
o
float newValue = -(oldValue); //() aren't needed, I just use them out of habit
Para invertir el signo, ponga un signo menos delante de él.
¿Podría el infractor dejar un comentario? Gracias. –
2 votos negativos sin motivo? ¡Venga! –
El título pide una negación en C, el contenido de la pregunta pide un valor absoluto, y en otro lugar el cartel decía Objective C en lugar de C. No puede esperar que su respuesta satisfaga a todos. O cualquiera. O incluso el cartel original. Deberías haberte mantenido al margen como yo. –
-x le dará el valor del signo invertido de x.
x = 0 - x;
? o ¿extraño el punto?
El operador de negación única -(expr)
hace exactamente lo que quiere.
int x = -7;
int y = 7;
x = -x; // x is now 7
y = -y; // y is now -7
El operador bit a bit complemento ~(expr)
que lo menciona, por otro lado, voltea todos los bits en la entrada.
En caso de que esto ayude, un problema que muchas implementaciones de valor absoluto en la naturaleza ignoran es que se anula la negación del valor más negativo de un tipo entero de complemento de dos tamaño fijo determinado.
nice answer ... –
Acabo de ver que esto está marcado como objetivo-c. Originalmente había respondido con respecto al título, pidiendo un operador "en C". Afortunadamente, "Objective-C es una capa delgada en la parte superior de C, y además es un superconjunto estricto de C. Es posible compilar cualquier programa C con un compilador Objective-C, y para incluir libremente el código C dentro de un Objective-C clase." http://en.wikipedia.org/wiki/Objective-C –
La negación simple con -
funciona, pero la mayoría de las respuestas han ignorado el hecho de que el OP intenta hacer un valor absoluto. Para eso, la herramienta correcta es abs()
para enteros y fabs()
para flotadores. El código será nítido y el resultado será el esperado. (Editar: asegúrese de leer la documentación y los errores para estas herramientas. Como señala Nick, negar el número más negativo con abs()
devuelve el mismo número negativo.)
En principio, estoy de acuerdo y he votado su respuesta. Por supuesto, uno podría razonablemente esperar que el programa sea cancelado, o que se levante una excepción, cuando se trata de negar el entero más negativo. Ver BUGS en la documentación vinculada para abs(). –
@Nick: 'abs()' no se bloquea en el iPhone; simplemente devolverá INT_MIN. –
@Nick: Eso no está en el espíritu de C. Como dijo Stroustrup en un caso similar para C++, el lenguaje debería proporcionar el operador rápido, y tal vez el operador verificado. Si el lenguaje proporciona el operador rápido, el usuario puede insertar cheques según sea necesario, mientras que si el idioma solo proporciona al operador verificado, el usuario no tiene forma de descartar los cheques cuando sea innecesario y de hacerlo rápidamente. Siempre puede escribir 'int checked_abs (int)' si lo desea. –
Tricky subject. La forma directa de cambiar el signo en un número de punto flotante es voltear el valor del bit más significativo de la variable. La notación enumerada en las otras respuestas está a merced del compilador, que generalmente está bien, pero no siempre. Por "float x", la respuesta es:
*(unsigned int*)&x ^= (1<<31)
Si está escribiendo para algo como el iPhone, que tiene un procesador Cortex A8 (o algo parecido), se quiere evitar dobles y también evitar condicionales cuando se trabaja con flotadores en bucles internos. Por lo tanto, usted puede hacer esto:
*(unsigned int*)&x ^= ((x<0) << 31);
que se convertirá negativos a positivos sin necesidad de utilizar una instrucción de salto. Si esto está en un bucle interno, será de 5 a 20 veces más rápido que con otro método, en el iPhone. Si no está en un bucle interno, ¡entonces probablemente no te importe demasiado!
Esta es una solución horrible, no estoy seguro de lo que sucedió aquí. Vea la respuesta a continuación con abs() para la correcta.
Aunque esta es una vieja pregunta, tal vez esta respuesta ayudará a algunos de ustedes.Yo quería tener un valor positivo o negativo de un número basado en otro de los resultados (que permite decir un mustBeNegative booleano) la forma en que hice esto es:
int number = 7;
if(mustBeNegative)
{
number = number * 1;
}
else
{
number = number * -1;
}
El número será su valor positivo o negativo sobre la base de la " mustBeNegative "value. Cuando el número ya era negativo, será positivo y viceversa.
- 1. cómo cambiar un número positivo a negativo y viceversa?
- 2. dirección de memoria valor positivo o negativo en c?
- 3. ¿Producir flotación aleatoria del rango negativo al positivo?
- 4. C Unsigned int que proporciona un valor negativo?
- 5. ¿Cómo convertir un número negativo a positivo?
- 6. C: comportamiento de operador unitario negativo con operandos sin signo
- 7. Recuperar un ángulo positivo o negativo de 3 puntos
- 8. Comprobando si un número es positivo o negativo usando operadores bit a bit
- 9. Convierta un número negativo a uno positivo en JavaScript
- 10. JavaScript Random Positivo o Negativo Número
- 11. actualización positivo a un valor negativo en MySQL
- 12. nombres de los campos booleanos positivo o negativo
- 13. ¿Cómo puedo verificar si un entero con signo es positivo?
- 14. ¿Hay un operador C# IN?
- 15. ¿Hay un operador de exponente en C#?
- 16. ¿Cómo funciona el operador unario negativo en booleanos en C++?
- 17. desbordamiento sin signo con operador de módulo en C
- 18. Cálculo de porcentaje negativo y positivo
- 19. no operador en C++ para int?
- 20. ¿Puedo obtener el formato de moneda estándar para usar un signo negativo en lugar de paréntesis?
- 21. Regex - Combinando lookbehind positivo y negativo
- 22. número Parse con prefijo positivo/negativo de cadena en java
- 23. ¿Hay un operador perl "no en"?
- 24. ¿Hay algún compilador c/C++ que pueda advertir (o dar error) o conversión enum a int?
- 25. Diferencia entre int sin signo y sin signo en C++
- 26. ¿Qué significa convertir int a void * o viceversa?
- 27. ¿Cambiar el signo de un número en PHP?
- 28. sin signo de longitud con valor negativo
- 29. Los métodos de afirmación de JUnit deben formularse en positivo o negativo.
- 30. ¿Hay un operador de Scala similar al $ (signo de dólar) de Haskell?
¿Y si ya es negativo? se cancelarán? – nickthedude
No sé objetivamente-c, pero en función de su pregunta, probablemente haya una función de biblioteca para obtener el valor absoluto ... el borrado con el signo sería un olor a código para mí. – overslacked