Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]
int a = 1;
a ^= 2;


Es lo mismo que hacer:

Código (cpp) [Seleccionar]

int a = 1;
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
Cita de: enritter en  2 Julio 2010, 12:32 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
Cita de: neptun0 en  2 Julio 2010, 13:09 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...

Cita de: neptun0 en  2 Julio 2010, 13:09 PM
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:
int i=2^2;
printf("%d",i);

4

NOTA: Los ejemplos son de lenguaje C.
Título: Re: [?] Operador binario "^"
Publicado por: leogtz en 5 Julio 2010, 20:28 PM
#include <stdio.h>
int main()
{
    signed int var = 2^3;
    printf("%d\n", var);
    return 0;
}


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 (cpp) [Seleccionar]
unsigned long int elevara(unsigned long int base, unsigned long int exponente)
{
unsigned long int resultado;
if(exponente==0){
resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
return resultado;
}
resultado= base;
for(int i=1; i<exponente; i++){
resultado=resultado*base;    //la potenciacion es una multiplicacion reiterada de la base por si misma
}                             //elnumero de veces que indique el exponente.
return resultado;
}

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
Cita de: tuket en  5 Julio 2010, 20:40 PM
Para exponenciacion se puede hacer una simple rutina de multiplicación reiterada:
Código (cpp) [Seleccionar]
unsigned long int elevara(unsigned long int base, unsigned long int exponente)
{
unsigned long int resultado;
if(exponente==0){
resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
return resultado;
}
resultado= base;
for(int i=1; i<exponente; i++){
resultado=resultado*base;    //la potenciacion es una multiplicacion reiterada de la base por si misma
}                             //elnumero de veces que indique el exponente.
return resultado;
}

Esta no si es muy buena pero la hice yo para un codigo mio.

Aquí hay un ligero error:
Código (cpp) [Seleccionar]
if(exponente==0){
resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
return resultado;
}



Haces return dos veces.
Título: Re: [?] Operador binario "^"
Publicado por: lapras en 6 Julio 2010, 15:31 PM
CitarSentencia 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 (cpp) [Seleccionar]
#include <iostream>

int funciondeprueba();

int main(){
std::cout<<funciondeprueba()<<std::endl;
}

int funciondeprueba(){
return 1;
return 2;
return 3;
}

Una vez que hace reurn 1; ya no puede hacer return 2; ni return 3;.
Por eso devuelve 1; :
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
Cita de: tuket en  6 Julio 2010, 15:31 PM
CitarSentencia 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 (cpp) [Seleccionar]
#include <iostream>

int funciondeprueba();

int main(){
std::cout<<funciondeprueba()<<std::endl;
}

int funciondeprueba(){
return 1;
return 2;
return 3;
}

Una vez que hace reurn 1; ya no puede hacer return 2; ni return 3;.
Por eso devuelve 1; :
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


if (edad > 18)
   return "mayor";
else
   return "menor";


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
Cita de: raul338 en  6 Julio 2010, 18:47 PM
mira esto


if (edad > 18)
   return "mayor";
else
   return "menor";


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 (cpp) [Seleccionar]
if(exponente==0){
resultado=1;     //cualquier numero elevado a cero es 1(escepto 0)
return resultado;
}


Por eso reclamé.

En todo caso esto no tiene fundamento:

Código (cpp) [Seleccionar]
int funciondeprueba(){
return 1;
return 2;
return 3;
}


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
Cita de: tuket en  6 Julio 2010, 21:01 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 (cpp) [Seleccionar]
#include <iostream>
std::string algo(void)
{
    return "bye";
}
int main(void)
{
    std::cout << algo() << std::endl;
    return 0;
}
Título: Re: [?] Operador binario "^"
Publicado por: Bb-7 en 16 Julio 2010, 17:31 PM
Cita de: Leo Gutiérrez. en  5 Julio 2010, 20:28 PM
#include <stdio.h>
int main()
{
    signed int var = 2^3;
    printf("%d\n", var);
    return 0;
}


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. :-[ :-[