elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿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 2,028 veces)
bichovis

Desconectado Desconectado

Mensajes: 2


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

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: 559


Tea_Madhatter


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

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: 1.639


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

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

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
naderST


Desconectado Desconectado

Mensajes: 625



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

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

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

rir3760


Desconectado Desconectado

Mensajes: 1.639


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

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
  1. int x += (i = fucion()) && 1;
Es equivalente a:
Código
  1. 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

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
s00rk

Desconectado Desconectado

Mensajes: 195



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

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
  1. int x += (i = fucion()) && 1;
Es equivalente a:
Código
  1. 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
  1. int i = fucion();
  2. int x = Integer.MIN_VALUE;
  3. x += i && 1;
  4.  

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:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Separar instrucciones, pausa entre instrucciones
Java
NelxoN 5 5,831 Último mensaje 28 Marzo 2009, 18:24 pm
por Amerikano|Cls
Rammstein - Mutter. ¿Como interpretan la letra?. « 1 2 »
Foro Libre
Draklit 12 4,906 Último mensaje 25 Septiembre 2010, 18:54 pm
por Castiblanco
Como decodificar prefijos de x86 instrucciones 32 bits apropiadamente???
ASM
harry_the_blogger 5 2,268 Último mensaje 24 Septiembre 2014, 22:18 pm
por x64core
duda en la suma de estas dos instrucciones
Electrónica
xemnas 1 1,257 Último mensaje 3 Noviembre 2014, 02:54 am
por Franny
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines