Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: enritter en 2 Julio 2010, 11:41 am



Título: [?] Operador binario "^"
Publicado por: enritter en 2 Julio 2010, 11:41 am
He visto en algun ejemplo que usaban esto ^ pero nose que quiere decir
bla ^= 5;



Salu2


Título: Re: [?] Operador binario "^"
Publicado por: Horricreu en 2 Julio 2010, 12:21 pm
¿En qué lenguaje estás? Si estás en C/C++ esto es una asignación con XOR binário (http://es.wikipedia.org/wiki/Operadores_de_C_y_C%2B%2B#Operadores_a_nivel_de_bit). Hacer:

Código
  1. int a = 1;
  2. a ^= 2;

Es lo mismo que hacer:

Código
  1. int a = 1;
  2. a = a ^ 2;

Saludos :P


Título: Re: [?] Operador binario "^"
Publicado por: enritter en 2 Julio 2010, 12:32 pm
me refiero que hace esto ^, eso es lo que no se.




Título: Re: [?] Operador binario "^"
Publicado por: Horricreu en 2 Julio 2010, 12:36 pm
me refiero que hace esto ^, eso es lo que no se.

Pues léete esto (http://en.wikipedia.org/wiki/Exclusive_or). Otra opción es buscar en Google, que no te vamos a hacer toda la faena, ya puedes buscar tú también ;)

Saludos :P


Título: Re: [?] Operador binario "^"
Publicado por: neptun0 en 2 Julio 2010, 13:09 pm
En algunos lenguajes, es el signo de exponenciacion.


Título: Re: [?] Operador binario "^"
Publicado por: Horricreu en 2 Julio 2010, 15:20 pm
En algunos lenguajes, es el signo de exponenciacion.

Por esto le pedí en qué lenguaje programa, cosa que ha pasado olímpicamente. Yo le he dicho cómo es en C/C++.

Saludos :P


Título: Re: [?] Operador binario "^"
Publicado por: @synthesize en 4 Julio 2010, 08:09 am
La próxima vez, incluye un título mas descriptivo :-\


Título: Re: [?] Operador binario "^"
Publicado por: skapunky en 4 Julio 2010, 12:39 pm
Por ejemplo sirve para declarar punteros en pascal...

En algunos lenguajes, es el signo de exponenciacion.

Seguro? Nunca he visto ninguno xd


Título: Re: [?] Operador binario "^"
Publicado por: enritter en 4 Julio 2010, 23:59 pm
Lo siento por no haber respondido antes tuve algunos problemas con el ordenador..  :(

Si el lenguaje era c, gracias por las respuestas


Título: Re: [?] Operador binario "^"
Publicado por: lapras en 5 Julio 2010, 15:56 pm
En C/C++ ^ hace la operacion lógica XOR
XOR devuelve 0 si los bits son iguales i 1 cuando los bits son diferentes
ej:
00001111^11001100 => 11000011


Título: Re: [?] Operador binario "^"
Publicado por: enritter en 5 Julio 2010, 16:07 pm
Gracias con eso creo que lo entiendo no sabria aplicarlo pero al menos tengo el concepto  ;D

Gracias por todo


Título: Re: [?] Operador binario "^"
Publicado por: Bb-7 en 5 Julio 2010, 16:26 pm
Compara los bits (http://es.wikipedia.org/wiki/Bit) de dos bytes (http://es.wikipedia.org/wiki/Byte) y pone a 1 los que sean distintos. P. ej.:
235^143=100

235 -> 11101011
143 -> 10001111 ^
--------------------------
100 -> 01100100

Aparte de eso, también se puede usar como signo de exponenciación, como dice neptun0:
Código
  1. int i=2^2;
  2. printf("%d",i);
Código:
4

NOTA: Los ejemplos son de lenguaje C.


Título: Re: [?] Operador binario "^"
Publicado por: leogtz en 5 Julio 2010, 20:28 pm
Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    signed int var = 2^3;
  5.    printf("%d\n", var);
  6.    return 0;
  7. }
  8.  

Código:
1

En C no funciona como signo de exponenciación, para eso está la función pow() definida en math.h.


Título: Re: [?] Operador binario "^"
Publicado por: lapras en 5 Julio 2010, 20:40 pm
Para exponenciacion se puede hacer una simple rutina de multiplicación reiterada:
Código
  1. unsigned long int elevara(unsigned long int base, unsigned long int exponente)
  2. {
  3. unsigned long int resultado;
  4. if(exponente==0){
  5. resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
  6. return resultado;
  7. }
  8. resultado= base;
  9. for(int i=1; i<exponente; i++){
  10. resultado=resultado*base;    //la potenciacion es una multiplicacion reiterada de la base por si misma
  11. }                             //elnumero de veces que indique el exponente.
  12. return resultado;
  13. }
Esta no si es muy buena pero la hice yo para un codigo mio.


Título: Re: [?] Operador binario "^"
Publicado por: leogtz en 5 Julio 2010, 22:42 pm
Para exponenciacion se puede hacer una simple rutina de multiplicación reiterada:
Código
  1. unsigned long int elevara(unsigned long int base, unsigned long int exponente)
  2. {
  3. unsigned long int resultado;
  4. if(exponente==0){
  5. resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
  6. return resultado;
  7. }
  8. resultado= base;
  9. for(int i=1; i<exponente; i++){
  10. resultado=resultado*base;    //la potenciacion es una multiplicacion reiterada de la base por si misma
  11. }                             //elnumero de veces que indique el exponente.
  12. return resultado;
  13. }
Esta no si es muy buena pero la hice yo para un codigo mio.

Aquí hay un ligero error:
Código
  1. if(exponente==0){
  2. resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
  3. return resultado;
  4. }


Haces return dos veces.


Título: Re: [?] Operador binario "^"
Publicado por: lapras en 6 Julio 2010, 15:31 pm
Citar
Sentencia de retorno "return"
Esta sentencia sale de la función donde se encuentra y devuelve el control a la rutina que
la llamó, opcionalmente con un valor de retorno.
Realmente cuando se ejecuta la 1º se abandona la función, es dicir, nose puede ejecutar la 2ª.

Mira este ejemplo:
Código
  1. #include <iostream>
  2.  
  3. int funciondeprueba();
  4.  
  5. int main(){
  6. std::cout<<funciondeprueba()<<std::endl;
  7. }
  8.  
  9. int funciondeprueba(){
  10. return 1;
  11. return 2;
  12. return 3;
  13. }
Una vez que hace reurn 1; ya no puede hacer return 2; ni return 3;.
Por eso devuelve 1; :
Código:
tuket@tuket-desktop:~$ g++ pru.cpp
tuket@tuket-desktop:~$ ./a.out
1
tuket@tuket-desktop:~$
Es como cuando en ensamblador haces retn se abandona la funcion y ya no hace nada mas.


Título: Re: [?] Operador binario "^"
Publicado por: leogtz en 6 Julio 2010, 17:53 pm
Citar
Sentencia de retorno "return"
Esta sentencia sale de la función donde se encuentra y devuelve el control a la rutina que
la llamó, opcionalmente con un valor de retorno.
Realmente cuando se ejecuta la 1º se abandona la función, es dicir, nose puede ejecutar la 2ª.

Mira este ejemplo:
Código
  1. #include <iostream>
  2.  
  3. int funciondeprueba();
  4.  
  5. int main(){
  6. std::cout<<funciondeprueba()<<std::endl;
  7. }
  8.  
  9. int funciondeprueba(){
  10. return 1;
  11. return 2;
  12. return 3;
  13. }
Una vez que hace reurn 1; ya no puede hacer return 2; ni return 3;.
Por eso devuelve 1; :
Código:
tuket@tuket-desktop:~$ g++ pru.cpp
tuket@tuket-desktop:~$ ./a.out
1
tuket@tuket-desktop:~$
Es como cuando en ensamblador haces retn se abandona la funcion y ya no hace nada mas.

¿Y luego?

No le veo el caso de que hayas puesto otro return, porque esos return' s están dentro del IF, así que sí es error, por lo menos conceptual.

No le hallo sentido a tu replica.


Título: Re: [?] Operador binario "^"
Publicado por: raul338 en 6 Julio 2010, 18:47 pm
mira esto

Código
  1. if (edad > 18)
  2.   return "mayor";
  3. else
  4.   return "menor";
  5.  

Entiendes, se pueden poner cuantos return quieras......... solo depende de las opciones que quieras devolver!


Título: Re: [?] Operador binario "^"
Publicado por: leogtz en 6 Julio 2010, 18:57 pm
mira esto

Código
  1. if (edad > 18)
  2.   return "mayor";
  3. else
  4.   return "menor";
  5.  

Entiendes, se pueden poner cuantos return quieras......... solo depende de las opciones que quieras devolver!

Entiendo, claro.

Ya ví mi error, aquí equivocadamente vi dos sentencias return:

Código
  1. if(exponente==0){
  2. resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
  3. return resultado;
  4. }

Por eso reclamé.

En todo caso esto no tiene fundamento:

Código
  1. int funciondeprueba(){
  2. return 1;
  3. return 2;
  4. return 3;
  5. }

Si la función es llamada siempre devolvería 1, no hay por qué poner los otros dos returns.

Saludos.


Título: Re: [?] Operador binario "^"
Publicado por: lapras en 6 Julio 2010, 21:01 pm
Ya lo se, era un ejemplo para demostrar justamente eso  XD
Por cierto raul338, un return no puede devolver una cadena de carácteres, tal vez sin comitas...


Título: Re: [?] Operador binario "^"
Publicado por: raul338 en 7 Julio 2010, 17:16 pm
Por cierto raul338, un return no puede devolver una cadena de carácteres, tal vez sin comitas...

C++ no puede eso? D:

En todo caso, en otros lenguajes si :xD

Ademas, fue pseudocodigo xD


Título: Re: [?] Operador binario "^"
Publicado por: leogtz en 7 Julio 2010, 20:16 pm
Puede devolver un string:

Código
  1. #include <iostream>
  2. std::string algo(void)
  3. {
  4.    return "bye";
  5. }
  6. int main(void)
  7. {
  8.    std::cout << algo() << std::endl;
  9.    return 0;
  10. }
  11.  


Título: Re: [?] Operador binario "^"
Publicado por: Bb-7 en 16 Julio 2010, 17:31 pm
Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    signed int var = 2^3;
  5.    printf("%d\n", var);
  6.    return 0;
  7. }
  8.  

Código:
1

En C no funciona como signo de exponenciación, para eso está la función pow() definida en math.h.
Tienes toda la razón, me había liado. En C sólo funciona como operador XOR. :-[ :-[