2015-10-10 17 views
5

Ultimamente mi è stato dato un test di codifica e mi chiedevo come posso annullare i numeri -2 di base?Come negare i numeri di base -2?

Ad esempio l'array [1,0,0,1,1] rappresenta in di base -2:

-2 bases: 

1,-2,4,-8,16 

1 + (-8) + 16 = 9 

[1,0,0,1,1] 

negativo 9 in di base -2 è:

-2 bases: 

1,-2,4,-8 

1 + (-2) + -8 = -9 

[1,1,0,1] 

Sono al buio riguardo alla domanda. Ci deve essere una soluzione intuitiva per questo. Hai qualche suggerimento?

+0

Non cercare di mancare di rispetto ma la domanda non mi è chiara. Cosa vuoi ottenere esattamente? –

+2

Suggerimento: guarda cosa ottieni se aggiungi coppie consecutive della tua serie base. – biziclop

+0

Ho aggiunto dei chiarimenti. –

risposta

13

Nel basamento − 2, un 1 nella posizione i mezzi (-2) i.

Quindi, una [1,1] in posizioni [i, i +1] mezzi (-2) i   +   (-2) i +1   =   (-2) i   +   (-2) (- 2) i   = 01.237.819,055 mila(1   +   -2) (- 2) i   =   - (- 2) i.

Quindi è possibile annullare qualsiasi occorrenza di un [1,0] modificandolo in [1,1] e viceversa.

Eventuali altre occorrenze di 0, naturalmente, possono essere lasciati intatti: -0   =   0.

Quindi nel tuo esempio, abbiamo diviso [1,0,0,1,1] in [{ 1,0}, {0}, {1,1}], negano ogni parte per ottenere [{1,1}, {0}, {1,0}], cioè, [1,1,0,1, 0] e rimuove lo 0 alto non necessario, producendo [1,1,0,1].

+0

Questo è quello che ho provato a suggerire :) – biziclop

+0

@ruakh, come negare questo numero, come -23 quale rappresentazione è 1,0,0,1,1,1 e ho bisogno di ottenere 23 rappresentazioni. E che dire di 42 quale rappresentazione è 0,1,1,1,1,1,1. Per 42 è facile 1,0,1,0,1,0. Ma quale logica dovrebbe essere per la conversione inversa da negativo -23 a 23 e per rappresentazioni con numero pari di bit? Si prega di espandere la risposta. –

+0

@ruakh, per esempio mostra come convertire 1227. è 11111011101 e dovrebbe essere convertito 111101110101. Ma non riesco a vedere come ottenerlo passo dopo passo. –

3

Proviamo alcuni esempi:

 (16 -8 4 -2 1) 
1 = 0 0 0 0 1 
-1 = 0 0 0 1 1 
2 = 0 0 1 1 0 
-2 = 0 0 0 1 0 
3 = 0 0 1 1 1 
-3 = 0 1 1 0 1 
4 = 0 0 1 0 0 
-4 = 0 1 1 0 0 
5 = 0 0 1 0 1 
-5 = 0 1 1 1 1 

Possiamo cercare di definire questo matematicamente:

ingresso Dato I (b) (dove B è il numero di bit),

  1. I = Σ (-2) b b (b) - definizione di base -2)
  2. O = -I - cosa stiamo cercando di risolvere per
  3. O = -Σ (-2) b I (b) - sostituzione
  4. O = Σ - (- 2) b I (b) - Distribuzione
  5. - (- 2) b = (-2) b + (-2) b + 1
  6. O = Σ ((- 2) b + (-2) b + 1) I (b) - sostituzione
  7. O = Σ ((- 2) b I (b) + (-2) b + 1 I (b)) - sostituzione
  8. O = Σ (-2) b I (b) + Σ (-2) b + 1 I (b)
  9. o (b) = I (B) + I (B-1)

Ora, questo lascia la possibilità che o (b) è 0, 1 o 2, in quanto I (B) è sempre 0 o 1.

Se o (b) è un 2, che è un "portare", Diamo un'occhiata ad alcuni esempi di porta:

01.235.164,106174 millions

per ogni b, a partire da 0, se O (b)> = 2, sottrarre 2 da O (b) e incrementare O (b + 1) e O (b + 2). Fatelo fino a raggiungere il massimo.

Speriamo che questo lo spieghi in modo sufficientemente dettagliato.

Problemi correlati