lo que será la salida del siguiente código
int x,a=3;
¿Qué significa + sign after variable?
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);
ouput es: 11 3. Quiero saber cómo? y ¿qué + firmar después de un medio?
lo que será la salida del siguiente código
int x,a=3;
¿Qué significa + sign after variable?
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);
ouput es: 11 3. Quiero saber cómo? y ¿qué + firmar después de un medio?
Creo que DrYap tiene razón.
x = + + a + + + a + + + 5;
es lo mismo que:
x = + (+ a) + (+ (+ a)) + (+ (+ 5));
Los puntos clave son:
1) C, C++ no tienen + como un operador de sufijo, por lo que sabemos que tenemos que interpretarlo como un prefijo
2) monádico + se une más estrechamente (es mayor precedencia) que diádica +
Funn ¿No es así? Si estos fueran signos de que no se vería tan extraño. Monadic +/- es solo un signo principal, o para decirlo de otra manera, "+ x" es lo mismo que "0 + x".
sí, eso tiene sentido. Hay espacios entre signos + pero si quita espacios muestra un error de compilación: 'Lvalue required'. – user980089
Sí, porque si elimina el espacio entre '+ +', obtendrá un '' ++ '(operador de incremento) en lugar de dos signos más. –
'+ x' se supone que es como' 0 + x' para lo que '0' exista para el tipo de' x', pero no hay tal garantía por sobrecarga. Podría llamarse el "operador de decaimiento" porque devuelve un valor puro incluso si su operando es un valor l. Por ejemplo, '++ + a' es ilegal a excepción de sobrecargas, y convencionalmente no incrementará' a'. – Potatoswatter
El + después de simplemente se ve como un + antes del siguiente valor. Si utiliza el espaciamiento constante que es lo mismo que:
x = + + a + + + a + + + 5;
Pero no todos los + s son necesarios por lo que actuará lo mismo que hacer:
x = a + a + 5;
El valor de a es invariable porque nunca ha usado el operador de incremento que es ++ sin espacio en blanco entre los dos símbolos +. + y ++ son dos operadores separados.
Yo agregaría que C tiene unario '+', para la simetría con el unario menos '-', y que esto es lo que se usa aquí. Nadie sabe para qué es la ventaja única, excepto para los programadores confusos. http://msdn.microsoft.com/en-us/library/s50et82s(v=vs.71).aspx –
pero en este caso no está sucediendo ya que el valor de a no se incrementa. Hay 3 signos + antes del segundo a. – user980089
¿Qué quieres decir con que no está pasando? – DrYap
El código parece ser equivalente a:
x= (+(+(a)))+ (+ (+(a)))+ (+(+(5)));
es decir, x = a + a + 5
. Que es 11. Sabes que puedes poner + o - firmar antes del número, ¿verdad? Ahora esos +
simplemente indican signo de variable. Dado que el signo es +
, la variable permanece sin cambios, es decir "+5" significa "5", entonces "+ a" significa "a", y "+ + a" significa "+ (+ a)" que significa "a". De la misma manera, puedes escribir x = + + + 3 + + + + 3 + + + + 5
. O x = - + + - 3 + - + - 3 - - + 5;
.
Desde los +
operadores no son dos uno al lado del otro, pero siempre separados por un espacio en blanco la declaración x=+ +a+ + +a+ + +5;
se leyó realmente como
x=+ (nothing)+a+(nothing) +(nothing) +a+(nothing) +(nothing) +5;
así que básicamente la ecuación final se convierte en el estilo x=a+a+5;
y de ahí el resultado.
x = + + a + + + a + + 5: Esto es equivalente a
x = x = + + a + + + a + + 5 o podemos escribir como x = + (+ una) + (+ (+ a)) + (+ (+ 5)) y los + 's solo indican los signos que finalmente se evaluarán como x = a + a + 5.
¿Por qué escribir código? no entiendo? – cnicutar
No estoy seguro de cómo se analiza esto, pero estoy bastante seguro de que el resultado no está definido. – juanchopanza
¿Hay ['#define + a + a']? – vard