2010-09-14 49 views
11

estoy tratando con algo de código C que incluyeEn el lenguaje C, ¿qué significa "return ~ 0"?

return ~0; 

¿Qué significa eso? Es prácticamente imposible buscar en google ...

+0

Google para "operadores c" y lo encontrarás. –

+3

alguien siendo inteligente. Es lo mismo que -1. –

+1

En casos como estos, debe pensar en consultas alternativas, como "C operators" o "C tilde operator" –

Respuesta

19

~ es un bit no/complemento, también cambia todos los 0 a 1 y viceversa. ~ 0 es un valor con todos los bits configurados en 1.

0

No es cero ni verdadero.

+1

Puede que no sea una buena práctica de codificación por parte de la persona que escribió "return ~ 0", pero esta respuesta proporciona una perspectiva razonable de 50/50 de probabilidad de relevancia. Es bueno que trates de explicar algo y no solo aceptes la respuesta limitada y mecánica. Me limitaría a calificar si decía "mira cómo el código de llamada usa el valor de retorno ... si siempre lo trata como un booleano, entonces el programador debe usarlo como una notación convertible a verdad". –

+0

Una notación falsa para la verdad; C tiene operadores lógicos y de bits separados por una razón. '! 0' podría tener sentido, pero' ~ 0' no tiene sentido (y, como otros han dicho, definido por la implementación, por lo que nunca debería usarse, excepto en el código de bits de hardware específico del hardware). –

+0

Por supuesto, pero esa es solo una razón lógica para hacer esto, ¿por qué alguien debería devolver esto por cualquier otra razón? True es en la mayoría de los casos definido como -1 o! 0 cuando el valor de retorno es int. –

4

El operador ~ (tilde) realiza un complemento bit a bit en su único operando entero.

complemento de un número significa cambiar todos los 0 bits a 1 y todos los 1 s a 0 s

+0

'~' es el NOT bit a bit, como @ user446034 señaló en su respuesta. El complemento de las personas es un esquema de representación para números en formato binario que usa este operador. –

0

La tilde hace un cumplido a nivel de bit del número 0, que devuelve de nuevo un valor con todos los bits puestos a 1 , con cualquier tamaño del valor de retorno (para obtener 0xFF para un carácter, etc.)

+0

Esto es C. Si aplica '~ x' donde' x' tiene tipo 'char', obtendrá lo mismo que' ~ (int) x' debido a las promociones predeterminadas, ** no ** '0xff'. –

+0

@R .. Esto también se me ocurrió, y ahora estoy atascado con un voto positivo –

2

Aquí hay dos partes independientes: return y ~0.

return es una declaración de devolución. Lea sobre esto en su libro C favorito.

~0 es una expresión que consta de operador de bits-complemento ~ aplicado a un entero constante 0. Todos los bits en un valor cero del tipo int se invierten (se convierten en 1) y el valor resultante int (con todos los bits configurados en 1) es lo que evalúa la expresión ~0. En una máquina con dos complementos, un valor integral con signo con ese patrón de bits (111...1) representaría -1.

+1

, ¿por qué no solo devuelve -1? – osager

+1

@osager: "En una máquina con dos complementos, un valor integral firmado". Algunos programadores en algunas situaciones desean asegurarse de que su código funcione en casos de uso más allá de eso. –

6

La clave para responder a esta clase de preguntas mientras inspecciona el código es reconocer lo suficiente de la estructura del idioma para saber qué pregunta hacer. Por ejemplo, la instrucción return requiere una expresión, de un tipo compatible con el tipo de declaración declarada para la función en sí.

Sabiendo que ~0 debe ser una expresión, es una manera muy divertida de escribir un número, o es un operador que no reconoce aplicado al cero constante. Esta última hipótesis se verifica fácilmente, y buscar en Google "operador de lenguaje C" conducirá rápidamente al dozens of tables of operators. Casi any one de los cuales le dirá que el operador ~ es un operador bit a bit no único que invierte cada bit individual de su operando. En este caso específico, eso convierte el entero con signo 0 en el número entero representado con todos sus bits establecidos.

En la mayoría de plataformas encontrará, ese número entero tiene el valor -1.

3

De todos modos, para consultas de búsqueda con símbolos especiales como el suyo "return ~ 0;" puede usar http://symbolhound.com/

Es bastante útil para el programador.

+1

¡Excelente! La incapacidad de Google para hacer cualquier tipo de puntuación ha sido bastante dolorosa para mí en el pasado. Gracias :) – Mala

Cuestiones relacionadas