Multiplikation mit -1

Gast #3141569
Lesenswert?

Ohne speziell auf den MSP430 einzugehen:

Allgemein entspricht eine Multiplikation mit -1 dem toggle des 
Vorzeichen-Bits.
Für eine 8bit-Variable wäre das
1
var ^= 0b10000000;
und der Compiler sollte das von sich aus schon so hinbiegen ( oder auf 
die evtl. vorhandene Hardware-Multiplikation setzen ).
xor sollte auf einem aktuellen Controller nur 1 Takt brauchen, genaueres 
entnimmst du dem Instruction Set.

Kurz und knapp: eine Multiplikation mit -1 ist bei weitem nicht 
rechenintensiv.
Gast #3141585
Lesenswert?

nunja,

wenn ich den XOR-Befehl nutze, ist mir auch klar, dass es schnell gehen 
wird.

Problem ist aber ja, dass ich einen Zeiger durch eine Tabelle laufen 
lasse, in der eine Menge Zahlen stehen.
Die Inhalte werden mit anderen Zahlen multipliziert. Folglich sieht 
meine C-Codezeile eben eher in der Form aus:

Ergebnis = Var_2 * -1;

Versteht ein Controller so etwas zur Laufzeit?
#3141598
Lesenswert?

Multiplier schrieb:
> wenn ich den XOR-Befehl nutze, ist mir auch klar, dass es schnell gehen
> wird.

Was weiter oben bezüglich Toggeln des Vorzeichenbits steht, das vergiss 
besser schnell wieder, das ist Unsinn.

Multiplier schrieb:
> Ergebnis = Var_2 * -1;
>
> Versteht ein Controller so etwas zur Laufzeit?

Man könnte natürlich auch einfach
1
Ergenis = - Var_2;
schreiben.
Bei jedem halbwegs vernünftigen Compiler sollte aber in beiden Fällen 
der gleiche Code erzeugt werden.
Gast #3141599
Lesenswert?

Ich habe das sanfte Gefühl du verstehst nicht wie ein Controller 
arbeitet.

Deine Aussagen widersprechen sich, erst willst du mit -1, dann mit 
anderen Werten und dann wieder mit -1 Multiplizieren.

Schreib doch bitte einfach mal genau was du machen willst, auf welcher 
Platform usw.
Gast #3141601
Lesenswert?

Malte S. schrieb:
>> Aber nicht bei so exotischen Kodierungen wie dem Zweierkomplement.
Das stimmt natürlich, und wenn ich mich recht entsinne waren 
int8-Variablen sogar im 2er-Komplement.
Nichtsdestrotrotz würde ich solche Feinheiten dem Compiler überlassen 
und einfach nur
1
var * -1
schreiben.

Multiplier schrieb:
> Versteht ein Controller so etwas zur Laufzeit?
Zur Laufzeit versteht er nur Maschinencode.
Aber da du deinen C-Code durch einen Compiler jagst, wird dieser die 
passenden Optinen wählen. Wenn du wissen willst, was am Ende daraus 
wurde, schau dir das Assembler-Listing an.
Gast #3141741
Lesenswert?

AVerr schrieb:

> Allgemein entspricht eine Multiplikation mit -1 dem toggle des
> Vorzeichen-Bits.

Nein. Eine Multiplikation mit -1 entspricht dem Zweier-Komplement. Und 
das Zweier-Komplement ist ganz sicher nicht mit dem Toggle des 
Vorzeichenbits zu berechnen. Das würde z.B. bei 8 Bit zu dem verrückten 
Ergebnis führen, daß gelten müßte:

-128=0

(Weil:
-128=0b10000000
0   =0b00000000
)

Und das ist natürlich völliger Blödsinn.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren