2010-09-01 19 views
53

que tienen algún código javascript:Javascript, ¿Qué hace el operador^(cursivo)?

<script type="text/javascript"> 
$(document).ready(function(){ 
    $('#calcular').click(function() { 
    var altura2 = ((($('#ddl_altura').attr("value"))/100)^2); 
    var peso = $('#ddl_peso').attr("value"); 
    var resultado = Math.round(parseFloat(peso/altura2)*100)/100; 
    if (resultado > 0) { 
     $('#resultado').html(resultado); 
     $('#imc').show(); 
    }; 
    }); 
}); 
</script> 

¿Qué significa la (intercalación) del operador ^ en Javascript?

Respuesta

60

El ^ operator es el operador XOR bit a bit. Para cuadrar un valor, utilice Math.pow:

var altura2 = Math.pow($('#ddl_altura').attr("value")/100, 2); 
+3

en un lenguaje como Javascript, donde los tipos son tan flojo que apenas existen, yo casi son sorprendidos existen operaciones, incluso a nivel de bit :) – tenfour

+1

Sé que la función pow (el Web Master Loreal parece que no ...) pero no pude encontrar el operador^para javascript. Gracias por el enlace! – Torres

+1

¡Buena captura! Se lo envié a mi amigo español, quien se sorprendió un poco. Notado cómo, por ejemplo, 200cm/70kg te da un IMC de infinito ;-) – Michael

4

Este es el operador XOR bit a bit.

1

El bit a bit operador XOR se indica por un símbolo de intercalación (^) y, por supuesto, funciona directamente en la forma binaria de números. XOR bit a bit es diferente de OR bit a bit, ya que devuelve 1 solamente cuando exactamente un bit tiene un valor de 1.

Fuente: http://www.java-samples.com/showtutorial.php?tutorialid=820

29

^ está realizando OR exclusiva (XOR), por ejemplo

6 es 110 en binario, 3 es 011 en binario, y

6^3, que significa 110 XOR 011 da 101 (5).

110 since 0^0 => 0 
    011   0^1 => 1 
    ---   1^0 => 1 
    101   1^1 => 0 

Math.pow (x, 2) calcula pero para cuadrada es mejor utilizar x*x como Math.pow utiliza logaritmos y se obtiene más errores aproximaciones. (x² ~ exp(2.log(x)))

+0

¡No estaba al tanto del hecho del logaritmo! ¡Gracias! (Probablemente también sea más rápido, ¿no?) – Michael

+0

Probablemente sea más rápido (mientras que los procesadores matemáticos son bastante rápidos para operaciones simples "dobles"; es probable que el registro sea más lento, mientras se usa una optimización de la serie Taylor). –

+0

Me pregunto por qué Math.pow no solo usa x * x?! – Jowen

0

Se llama bit a bit XOR. Me explico que:

Usted tiene:

Decimal Binary 
0   0 
1   01 
2   10 
3   11 

Ahora queremos 3^2=? entonces tenemos 11^10=?

11 
10 
--- 
01 
--- 

por lo 11^10=01 01 en decimal es 1.

por lo que podemos decir que 3^2=1;