c++ - preguntas - NO(~) vs NEGACIÓN(!)
tag de las 30 canciones (3)
''~'' es el operador que: ~ x = -x-1 y cuando i = -1, entonces ~ i = 0. Si se pregunta el valor de ~ i, simplemente puede imprimirlos:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i=-5;
for (int i = -5; i <= 3; i++)
{
cout<<i<<" "<<(~i)<<endl;
}
}
y luego encontrarás: -5 4 -4 3 -3 2 -2 1 -1 0 0 -1 1 -2 2 -3 3 -4
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i=-5;
while(~(i))
{
cout<<i;
++i;
}
}
La salida es -5, -4, -3, -2. ¿No debería imprimir valores hasta -1? ¿Por qué es solo hasta -2? Y, por favor, explícame la diferencia entre los operadores ''no'' y ''negación''. Cuando escribo un programa, ellos fueron la fuente de errores.
while(i)
Sé que la condición de bucle será verdadera para i positivo y negativo, excepto 0.
while(!i) vs while(~i)
¿Para qué valores de ''i'' se ejecutan los dos bucles anteriores?
Cuando llego a -1 , el valor de ~i es ~-1 , o 0 , por lo while bucle while deja de ejecutarse. El El operador trabaja porque hace algo completamente diferente; da como resultado 1 para 0 valores y 0 para todos los demás valores. ~ es una negación a nivel de bit.
Un poco más en detalle:
-
~toma cada bit en un número y lo alterna. Así, por ejemplo, 10010 2 se convertiría en 01101 2. -
-1es todos los unos en binario cuando un entero con signo de complemento a dos. -
~0b…11111111es0.
Sin embargo:
-
!0es1!anythingElsees0 -
-1no es0 -
!-1sigue siendo0
Y si realmente quieres hacer un bucle incluyendo i == -1 , solo usa while (i) lugar de while (~i) .
Tiene razón en que i == -1 es la condición de salida: su bucle es equivalente a
int i=-5;
while(i != -1)
{
cout<<i;
++i;
}
// i == -1 immediately after the loop
Cuando se escribe de esta manera, debe quedar claro por qué -1 no se imprime, el valor se imprime primero y solo luego se incrementa, por eso -2 es el último valor que imprime.
El operador, por otro lado, producirá 1 solo cuando se le da un cero. Es por eso que el bucle se imprimiría -1 cuando el ! operador se utiliza en la condición de bucle.