[?] Operador binario "^"

Iniciado por enritter, 2 Julio 2010, 11:41 AM

0 Miembros y 1 Visitante están viendo este tema.

enritter

Gracias con eso creo que lo entiendo no sabria aplicarlo pero al menos tengo el concepto  ;D

Gracias por todo

Bb-7

#11
Compara los bits de dos bytes 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.





leogtz

#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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

lapras

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.

leogtz

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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

lapras

#15
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.

leogtz

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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

raul338

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!

leogtz

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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

lapras

#19
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...