AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Differenz zwischen Bytes mit Bit-Operatoren

Ein Thema von Theseus · begonnen am 17. Sep 2020 · letzter Beitrag vom 17. Sep 2020
Antwort Antwort
Theseus

Registriert seit: 21. Jun 2011
18 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

Differenz zwischen Bytes mit Bit-Operatoren

  Alt 17. Sep 2020, 10:49
Sicher eine sehr einfache Frage - aber ich kriege es gerade nicht hin

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?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Differenz zwischen Bytes mit Bit-Operatoren

  Alt 17. Sep 2020, 10:53
vielleicht hilft Dir das weiter-> http://www.delphibasics.co.uk/RTL.asp?Name=Xor

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Theseus

Registriert seit: 21. Jun 2011
18 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#3

AW: Differenz zwischen Bytes mit Bit-Operatoren

  Alt 17. Sep 2020, 11:57
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Differenz zwischen Bytes mit Bit-Operatoren

  Alt 17. Sep 2020, 12:15
dif := z1 xor z2

Ist es nicht das was Du anstrebst?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Theseus

Registriert seit: 21. Jun 2011
18 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#5

AW: Differenz zwischen Bytes mit Bit-Operatoren

  Alt 17. Sep 2020, 12:47
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ß!
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Differenz zwischen Bytes mit Bit-Operatoren

  Alt 17. Sep 2020, 17:15
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
Michael Gasser
  Mit Zitat antworten Zitat
Theseus

Registriert seit: 21. Jun 2011
18 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#7

AW: Differenz zwischen Bytes mit Bit-Operatoren

  Alt 17. Sep 2020, 18:54
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...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 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