AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

not und and Operator

Ein Thema von Eichhoernchen · begonnen am 10. Okt 2005 · letzter Beitrag vom 13. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#1

not und and Operator

  Alt 10. Okt 2005, 22:15
Ich beschäftige mich gerade mit den binären Operatoren und hexadezimalsystemen und wollte euch mal Fragen ob meine Vorstellung davon richtig ist:

ein Byte = 8 Bit

wenn ich ein Byte hab das 8 einsen hat also 1 1 1 1 1 1 1 1 (jedes bit auf 1 steht)

und jetzt möchte ich die 1 an einer Stelle durch ne 0 ersetzen dann müsste das doch mit and und xor klappen oder?

Ich hab mir das so gedacht:

Delphi-Quellcode:
Stelle8 auf 0 setzen: Byte xor $01 oder Byte and $FE
Stelle7 auf 0 setzen: Byte xor $02 oder Byte and $FD
Stelle6 auf 0 setzen: Byte xor $04 oder Byte and $FB
Stelle5 auf 0 setzen: Byte xor $08 oder Byte and $F7
Stelle4 auf 0 setzen: Byte xor $10 oder Byte and $EF
Stelle3 auf 0 setzen: Byte xor $20 oder Byte and $DF
Stelle2 auf 0 setzen: Byte xor $40 oder Byte and $BF
Stelle1 auf 0 setzen: Byte xor $80 oder Byte and $7F

So also die 1. Frage ist das richtig?
2. Wie initialisiere ich ein byte mit 1sen?( so: byte and $FF ?)


Danke schonmal
Jan
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#2

Re: not und and Operator

  Alt 10. Okt 2005, 22:32
erstmal ist das "rechteste" bit das bit 0 und das "linkeste" bit das bit 7 in einem 8-bit-byte.
normale stellenwertnotation.
es wird bei 0 angefangen mit zaehlen, weil dann shifts logischer sind.

grundsaetzlich sind deine xors richtig, aber sowas macht man eigentlich mit ands und nots, weil du mit einem xor nur das bit umdrehst (1->0, 0->1). du willst es aber resetten, denke ich...

initialisieren geht mit direkten werten, also z.b. $FF
Christoph
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: not und and Operator

  Alt 10. Okt 2005, 22:38
gibt es auch was anderes außer 8 bit bytes, ich dachte das 8 bits 1 byte sind ist ne definition....


Hmm okay, also and' s benutzen. Mit not säh das so aus?
Delphi-Quellcode:

byte := not $01 für an der [b]7.[/b] Stelle ne null zu setzen?

Danke!!!!
Jan
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#4

Re: not und and Operator

  Alt 10. Okt 2005, 22:40
es gibt/gab architekturen mit !=8 bits per byte. braucht dich aber nur historischerweise zu kuemmern.

variable := not $01;

bedeutet, dass variable alle bits bis auf das rechteste (kleinstwertigste) besetzt bekommt.
nenne es "bit 0", also "bit null", weil es das nullte bit ist.
es wird von rechts nach links numeriert, angefangen bei null.

bit setzen:
var := var or $01; { setzt bit null }
var := var or $04; { setzt bit zwei }

bit loeschen:
var := var and not $01; {loescht bit null }
var := var and not $80; {loescht bit sieben }
Christoph
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: not und and Operator

  Alt 10. Okt 2005, 22:56
wer sich sowas ausdenkt....
von rechts nach links, sind wir hier in Japan??

das mit bei null anfangen zu Zählen kann ich ja verkraften aber dann auch noch von rechts.... *kopfschüttel*


Zitat von Wikipedia:
Geschichte des Begriffs Byte

Das Wort Byte ist künstlich und stammt von englisch bit (deutsch: bisschen) und bite (deutsch: Happen; Quelle: The New Shorter Oxford English Dictionary). Verwendet wurde es, um eine Speichermenge oder Datenmenge zu kennzeichnen, die ausreicht, um ein Zeichen darzustellen. Der Begriff wurde 1956 von Werner Buchholz geprägt in einer frühen Designphase eines IBM-Computers[1]. Im Original beschrieb er eine Breite von 6 Bit und stellte die kleinste direkt adressierbare Speichereinheit eines Computers dar. Bereits 1956 erfolgte der Übergang zu 8 Bit. Die Schreibweise Bite wurde zu Byte geändert, um versehentliche Verwechslungen mit Bit zu vermeiden.
Jan
  Mit Zitat antworten Zitat
lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: not und and Operator

  Alt 10. Okt 2005, 23:06
Zitat von Eichhoernchen:
wer sich sowas ausdenkt....
von rechts nach links, sind wir hier in Japan?? ;)
Das hat mit Japan nix zu tun. Ist in unserem Zaehlsystem ganz genauso, von rechts nach links : Einer, Zehner, Hunderter, Tausender, ...

Entsprechend : 10^0, 10^1, 10^2, ... bzw. im Binaersystem halt 2^0, 2^1, 2^2, 2^3 (jeweils von rechts nach links).
Anders herum wuerde es Probleme geben. Ganz einfaches Beispiel in im Dezimalsystem:
23 = 2*10^1 + 3*10^0
230 = 2*10^2 + 3*10^1 + 0*10^0

Von links nach rechts durchnummeriert wuerde diese Zerlegung nicht funktionieren, dann waere 23 = 230 ;-)
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#7

Re: not und and Operator

  Alt 10. Okt 2005, 23:10
5634 = (5 * 10**3) + (6 * 10**2) + (3 * 10**1) + (4 * 10**0)

"erste" stelle (stelle null) ist ne 4. dagegen hat keiner was.

beschwer dich bei den arabern, von denen wir unser zahlensystem geklaut haben.
Christoph
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: not und and Operator

  Alt 12. Okt 2005, 20:14
Dann könnt ihr mir bestimmt auch erklären warum das hier nicht klappt:

Delphi-Quellcode:
function getbitfrombyte(b : byte; pos : integer) : Boolean;
Begin
 if b shl (7-pos) = $80
   then result := true
   else result := false;
end;

var b : byte;
Begin
 b := $FF;
if getbitfrombyte(b, 0)
  then showmessage('JO')
  else showmessage('');
end.

Warum liefert mir das "nö" ???

$FF = 1 1 1 1 1 1 1 1
Nr.: 7 6 5 4 3 2 1 0

Ich meine wenn ich b um 7 bits nach links verschiebe hab ich doch 1 0 0 0 0 0 0 0 und das ist doch $80 ...

könnte natürlich auch an mir leigen das ich einfach die Delphihilfe nicht verstehe aber so wie die das dort beschreiben müsste das 'JO' ergeben

Zitat von F1:
Die Operationen x shl y und x shr y verschieben den Wert von x um y Bits nach links oder rechts (falls es sich bei x um einen vorzeichenlosen Integer handelt). Dies entspricht der Multiplikation oder Division von x durch 2^y. Das Ergebnis hat denselben Typ wie x. Wenn beispielsweise in N der Wert 01101 (dezimal 13) gespeichert ist, liefert N shl 1 den Wert 11010 (dezimal 26) zurück. Beachten Sie, dass der Wert von y als Restwert der Größe von Typ x interpretiert wird. Wenn z.B. x ein Integer ist, wird x shl 40 als x shl 8 interpretiert, da ein Integer 32 Bit hat, und 40 minus 32 den Wert 8 ergibt.
Jan
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#9

Re: not und and Operator

  Alt 12. Okt 2005, 20:40
Zitat von Eichhoernchen:
Dann könnt ihr mir bestimmt auch erklären warum das hier nicht klappt:
Klar.
Du speicherst das Ergebnis nicht in einer Variable, sondern benutzt es direkt zum Vergleich. $FF shl 7 ist $7F80. Erst wenn man das Ergebnis in einer Byte-Variable speichert werden die oberen Bits abgeschnitten und man erhält $80.
Das kann man auch durch einen Typecast erreichen: if Byte(b shl (7-pos)) = $80 Aber auch damit ist deine getbitfrombyte-Funktion falsch. Beispiel: getbitfrombyte($FF, 7) führt zu dem Vergleich "if $FF = $80" --> false, obwohl true herauskommen sollte.

So ist es richtig: if b shl (7-pos) and $80 <> 0
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: not und and Operator

  Alt 12. Okt 2005, 21:04
hmm mist, stimmt,

okay der fehler wäre durch mein Programm nicht aufgefallen weil nur nach der 0ten stelle gefragt wird, hab ich gar nicht dran gedacht, aber gut dann merk ich mir das aufjedenfall mit der variablen und wie es richig geht!
Dankeschön!


Edit: hab noch ne kleine Frage...ich frag einfach nochmal hier, gehört zwar nur noch bedinnt dazu:
Ich bin dabei ein kleines Verschlüsselungsprogramm zu schreiben, was die Daten in den letzten Bits des Farbcodes versteckt.
Ich glaube das nennt man Stenographie.

ein Buchstabe (char) hat ja 8 bits. D.h. ich brauche 3 Pixel. 2x r, g, b und 1x r, g.
Wenn ich nun immer das 0te Bit des Farbwertes von r, g, b löche mit (r := r and $FE ) und dann wenn der das 0te byte des Buchstaben 1 ist dann setze ich (r := r or $01).
D.h.
r1 = 0.Bit
g1 = 1.Bit
b1 = 2.Bit
//Pixel wieder schreiben
r2 = 3.Bit
g2 = 4.Bit
b2 = 5.Bit
//Pixel wieder schreiben
r3 = 6.Bit
g3 = 7.Bit
b3 = b3
//Pixel wieder schreiben

Das müsste doch stimmen oder? Und zurück lesen geht ja einfach andersrum:
0.Bit = r(Pixel1)
1.Bit = g(Pixel1)
....


Ist da nen Denkfehler drin? Ich bekomme es nicht entschlüsselt und ich finde den Fehler nicht.
Jan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:53 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