Ho il seguente codice:~ operatore bit a bit in JavaScript
var a = parseInt('010001',2);
console.log(a.toString(2));
// 10001
var b = ~a;
console.log(b.toString(2));
// -10010
~ Esegue l'operatore NOT su ogni bit. NON si ottiene il valore invertito (a.k.un complemento di uno) di a.
dovrebbe quindi restituire questo .
Quindi non riesco a capire come possiamo ottenere -10.010 invece? L'unica spiegazione è che il potenziale:
010001 viene negata 101110 ma scrivere questa -10.001 e poi per una ragione oscura mi danno i due complementi e -10.001 -10.010 diventano.
Ma tutto questo è molto oscuro nella mia mente, avresti un'idea su cosa succede precisamente.
sembra che Javascript ritiene che questo sia un 32 bit firmato io nt sotto le coperte. 0b010001 = 0x00000011 o decimale 17. Il complemento di questo è 0xFFFFFFEE, o decimale -18, quando viene trattato come int firmato a 32 bit, che equivale a 0x111111111111111111,1111111111111111. –
Inoltre, 0b10010 è 18 positivo, quindi -0b10010 è -18. –