2010-09-01 24 views
53

ho qualche codice javascript:Javascript, cosa fa l'operatore^(caret)?

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

Cosa significa il (accento circonflesso) Operatore ^ significa in Javascript?

risposta

60

Il ^ operator è l'operatore XOR bit a bit. Al quadrato un valore, utilizzare Math.pow:

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

in un linguaggio come Javascript, dove i tipi sono così sciolto che a malapena esistono, sono quasi sorpreso ci sono operazioni ancora bit a bit :) – tenfour

+1

So che la funzione pow (il Web Master Loreal sembra no ...) ma non ho trovato l'operatore^per javascript. Grazie per il link! – Torres

+1

Bella cattura! L'ho inoltrato al mio amico spagnolo, che è rimasto un po 'scioccato. Notato come ad esempio 200cm/70kg ti dà un BMI di infinito ;-) – Michael

4

Questo è l'operatore XOR bit a bit.

1

Il bitwise operatore XOR è indicato da un accento circonflesso (^) e, naturalmente, lavora direttamente sulla forma binaria di numeri. XOR bit a bit è diverso da OR bit a bit in quanto restituisce 1 solo quando esattamente un bit ha un valore di 1.

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

29

^ sta eseguendo OR esclusivo (XOR), ad esempio

6 è 110 in binario, 3 è 011 in binario, e

6^3, ovvero 110 XOR 011 indica 101 (5).

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

Math.pow (x, 2) calcola ma per piazza è meglio utilizzare x*x come Math.pow utilizza logaritmi e si ottiene più approssimazioni errori. (x² ~ exp(2.log(x)))

+0

Non era a conoscenza del fatto del logaritmo! Grazie! (Probabilmente è anche più veloce, non è vero?) – Michael

+0

Probabilmente per essere più veloce (mentre i processori matematici sono piuttosto veloci per operazioni "double" semplici - il log rischia di essere più lento, mentre si usa un'ottimizzazione della serie Taylor). –

+0

Mi chiedo perché Math.pow non usi solo x * x?! – Jowen

0

E 'chiamato XOR bit a bit. Mi spiego è:

Hai:

Decimal Binary 
0   0 
1   01 
2   10 
3   11 

Ora vogliamo 3^2=? allora abbiamo 11^10=?

11 
10 
--- 
01 
--- 

così 11^10=01 01 in decimale è 1.

Quindi possiamo dire che 3^2=1;