elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:27  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ¿Cómo se interpretan estas instrucciones en C?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo se interpretan estas instrucciones en C?  (Leído 502 veces)
bichovis

Desconectado Desconectado

Mensajes: 2


Ver Perfil
¿Cómo se interpretan estas instrucciones en C?
« en: 31 Octubre 2011, 23:09 »

Hola a todos,

Viendo un código por ahí me he encontrado con instrucciones como las siguientes, que no se como se compilan (me gustaría traducirlas a Java)

int i;
int x += (i = fucion()) && 1;      (son dos simbolos &&, no uno)

¿Bajo qué circunstancias suma y qué es lo que suma a x?

o esta otra

int  status = (funcion_void(), !num_int);

¿Qué es lo que iguala a la variable entera?, ¿la negación de la variable otra variable numero entero?.

¿Cómo se pueden interpretar estas condicionales en C?

Muchas gracias y un saludo.


En línea
Belial & Grimoire


Desconectado Desconectado

Mensajes: 361


Tea_Madhatter


Ver Perfil
Re: ¿Cómo se interpretan estas instrucciones en C?
« Respuesta #1 en: 2 Noviembre 2011, 21:12 »

hola

pues por lo que veo depende de "i", la funcion "fucion()", me imagino que hace return con un numero

i = fucion();

int x;

x = x + i && 1;

&&, es una comparativa AND logico;

como decir y == 1 && x == 1, hacer algo; pero creo hay que ver que hace fucion para saber que suma a x y porque hace una comparativa con 1

la siguiene hay que ver que da "funcion_void" y que en num_int, pero si es tambien una comparativa podria usarse, strcmp, !=, u otra vez &&;


En línea

.                                 
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: ¿Cómo se interpretan estas instrucciones en C?
« Respuesta #2 en: 3 Noviembre 2011, 01:30 »

int x += (i = fucion()) && 1;      (son dos simbolos &&, no uno)
Esa declaración no es valida (no puedes utilizar "+=").

int  status = (funcion_void(), !num_int);
Aquí aplica primero el operador secuencial ',':

1) Se evalúa la expresion "funcion_void()", su resultado se descarta.
2) Se evalúa "!num_int" y ese es el resultado de la expresión.

En pocas palabras el resultado sera 0 o 1.

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
naderST


Desconectado Desconectado

Mensajes: 467



Ver Perfil
Re: ¿Cómo se interpretan estas instrucciones en C?
« Respuesta #3 en: 4 Noviembre 2011, 03:28 »

Código
int x += (i = fucion()) && 1;

@rir3760 que tiene de malo esa expresión?
En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: ¿Cómo se interpretan estas instrucciones en C?
« Respuesta #4 en: 4 Noviembre 2011, 04:06 »

Los problemas son dos.

El importante (por dejar invalida la sentencia) es que un objeto solo puede accederse después de su declaración y esto:
Código
int x += (i = fucion()) && 1;
Es equivalente a:
Código
int x = x + ((i = fucion()) && 1);
Declara la variable "x" y al darle un valor inicial utiliza una variable (ella misma) cuya declaración todavía no tiene efecto.

El segundo es, aun cuando fuera valida (no lo es), su valor inicial estaría dado por una recursion infinita (el valor inicial de "x" es el valor de "x" mas ...).

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
s00rk

Desconectado Desconectado

Mensajes: 139



Ver Perfil
Re: ¿Cómo se interpretan estas instrucciones en C?
« Respuesta #5 en: 4 Noviembre 2011, 04:21 »

Los problemas son dos.

El importante (por dejar invalida la sentencia) es que un objeto solo puede accederse después de su declaración y esto:
Código
int x += (i = fucion()) && 1;
Es equivalente a:
Código
int x = x + ((i = fucion()) && 1);
Declara la variable "x" y al darle un valor inicial utiliza una variable (ella misma) cuya declaración todavía no tiene efecto.

El segundo es, aun cuando fuera valida (no lo es), su valor inicial estaría dado por una recursion infinita (el valor inicial de "x" es el valor de "x" mas ...).

Un saludo

Es lo que iva a decir aunque tambien pense que talvez podria hacer que el compilador le otorgue el minimo valor disponible aunque seria muy dudoso que pase, asi que si ahi tienes razon al final.

si acaso seria asi
Código
int i = fucion();
int x = Integer.MIN_VALUE;
x += i && 1;
 

en i si se puede poner ahi directamente ya que fucion() devera devolver un int. y ya lo demas creo que se entiende, o bueno yo aun no del todo && ya que nunca lo he usado de esa manera.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines