2012-03-31 14 views
8

Warum ist das:bitweise XOR-Operator in JavaScript

console.log("1100"^"0001") 
=> 1101 // as expected 

console.log("1100"^"1001") 
=> 1957 // ??? 

Bitte erläutern. Vielen Dank.

+0

Sie verwenden den XOR-Operator, aber tatsächlich scheinen Sie zu wollen das OR, da für '1101 | 0001 = 1101' (ODER), während '1101^0001 = 0101' (XOR). – Tomalak

Antwort

11

Diese Zahlen werden als Dezimalzahlen interpretiert.

Versuchen:

console.log(parseInt("1100", 2)^parseInt("1001", 2)) 

Natürlich ist die Antwort (0101) in dezimal gedruckt wird (5).

Die JavaScript-Token-Grammatik unterstützt Zahlen in Dezimal, Oktal und Hex, aber nicht binär. Also:

console.log(0xC0^0x09) 

Die erste war, nebenbei bemerkt, weil 1100 (dezimal) ist 1101 (dezimal) nach dem xor mit 1.