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. -
-1
es todos los unos en binario cuando un entero con signo de complemento a dos. -
~0b…11111111
es0
.
Sin embargo:
-
!0
es1
!anythingElse
es0
-
-1
no es0
-
!-1
sigue 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.