Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Differenz zwischen Bytes mit Bit-Operatoren (https://www.delphipraxis.net/205501-differenz-zwischen-bytes-mit-bit-operatoren.html)

Theseus 17. Sep 2020 09:49

Differenz zwischen Bytes mit Bit-Operatoren
 
Sicher eine sehr einfache Frage - aber ich kriege es gerade nicht hin :oops:

Ich möchte abs(z1-z2) durch Addition mit Bit-Operatoren bestimmen.

function AbsDifferenz(z1, z2: byte): byte;
begin
result := z1 + not z2 + 1;
end;

Das funktioniert, solange z1 > z2 ist, aber nicht umgekehrt. Irgendwie erinnere ich mich, dass es eine xor-Formel dazu gab, aber ich finde die nicht...

Wer hilft mir auf die Sprünge?

Klaus01 17. Sep 2020 09:53

AW: Differenz zwischen Bytes mit Bit-Operatoren
 
vielleicht hilft Dir das weiter-> http://www.delphibasics.co.uk/RTL.asp?Name=Xor

Grüße
Klaus

Theseus 17. Sep 2020 10:57

AW: Differenz zwischen Bytes mit Bit-Operatoren
 
Danke für das Link, aber das hilft nicht wirklich. Was xor macht weiß ich schon, nur nicht wie ich es zur 'additiven Subtraktion' nutzen kann ;)

Klaus01 17. Sep 2020 11:15

AW: Differenz zwischen Bytes mit Bit-Operatoren
 
dif := z1 xor z2

Ist es nicht das was Du anstrebst?

Grüße
Klaus

Theseus 17. Sep 2020 11:47

AW: Differenz zwischen Bytes mit Bit-Operatoren
 
Nee, ich möchte tatsächlich abs(z1-z2) = abs(z2-z1) bestimmen.

Mit meiner obigen Formel

result := z1 + not z2 + 1

bekomme ich das richtige Ergebnis, wenn z1 > z2 ist

Z.B.: 7 - 3 => 7 + 252 + 1 => 260

Da in einem Byte das 256er (als 9.) Bit entfällt, bleibt Rest = 4.

Bei 3 - 7 => 3 + 248 + 1 => bleiben 252 als Rest ...

Irgendwas ist da also falsch, und ich meine mich schwach zu erinnern, dass es mit xor gehen müsste, finde aber die Formel nicht.

Immerhin ist: not z1 = z1 xor 255

Lieben Gruß!

Michael II 17. Sep 2020 16:15

AW: Differenz zwischen Bytes mit Bit-Operatoren
 
Zitat:

Zitat von Theseus (Beitrag 1473739)
Irgendwas ist da also falsch, ....

Falsch nicht... einfach noch nicht vollständig gelöst. Dein "z1 + not z2 + 1" entspricht genau "z1-z2". Und "z1-z2" wiederum entspricht genau "abs(z1-z2)", wenn z1>=z2.

Vorzeichenwechsel im Restklassenring https://de.wikipedia.org/wiki/Zweierkomplement

Theseus 17. Sep 2020 17:54

AW: Differenz zwischen Bytes mit Bit-Operatoren
 
Hallo Michael,

vielen Dank für den Hinweis! Vorzeichenerweiterung scheint da nötig - mal sehen, ob ich das hinbekomme. Ich brauche ja nicht alle Fälle aus dem Artikel zu berücksichtigen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz