PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : einzelne bits in bytes speichern



rathma
09.01.2006, 22:25
hi @all,
ich hab mal eine kleine anfängerfrage:
ich hab eine variable in der ich einen hexwert speicher. nemen wir mal als beispiel H81. wenn ich das jetzt das in binär umrechne ist das 10000001.
wie kann ich jetzt die einzelen bits in einzelen variabel speichen also zb
a=1
b=0
c=0
...
h=1

bzw gibt es eine befehl mit ich die einzelen bits abfragen kan wie zb
variable =befehl(byte,stelle des bytes 1-8 )

gruss
markus

darwin.nuernberg
09.01.2006, 22:47
Mit logischen Operationen AND und OR.

Ich schreib's mal im Codefenster da ist es besser Darzustellen:




Wert = &B00000000
B = 1

print "Vorher:"
print bin(Wert)
print bin(B)

if B = 1 then
Wert = Wert OR &B00000001
else
Wert = Wert AND &B11111110
end if

print "Nachher:"
print bin(Wert)

END 'Program


Tabellarisches Beispiel:


01010101 | 01010100
AND 11111110 | OR 00000001
-------- | --------
= 01010100 | = 01010101

Oder anders (nur ein Bit betrachtet):

1 AND 1 = 1 | 1 OR 1 = 1
1 AND 0 = 0 | 1 OR 0 = 1
0 AND 1 = 0 | 0 OR 1 = 1
0 AND 0 = 0 | 0 OR 0 = 0


Bit0 setzen:
Mit OR muss nur eine Bedingung erfüllt sein.
also Egal ob das Bit0 gesetzt ist oder nicht
mit "Wert OR 1" (00000001) wird es auf jeden Fall gesetzt.

Bit0 löschen:
Mit AND wird das Bit nur gesetzt wenn beide eine 1 haben.
mit "Wert AND 254" (11111110) wird auf jeden Fall das Bit0 gelöscht und die anderen bleiben so wie Sie sind.

Wie Du siehst, kannst Du logische Operationen auch mit beliebigen Zahlen duchführen.

PicNick
10.01.2006, 07:31
variable =befehl(byte,stelle des bytes 1-8 ) ==>
byte = &H81
nr = 0 - 7
variable = byte.nr ' oder direkt

variable1 = byte.0
variable2 = byte.1
variable3 = byte.2
variable4 = byte.3
variable5 = byte.4
variable6 = byte.5
variable7 = byte.6
variable8 = byte.7

darwin.nuernberg
10.01.2006, 19:44
Auch schön,
wusste ich noch nicht.

Aber Byte (Schlüsselwort) als Variablennamen verwenden (böses Faul)
auch als Beispiel.

Lieber Bwert verwenden.

Wieder was gelernt :-b

rathma
10.01.2006, 23:20
@PicNick

Danke hat super funktioniert.


Dann noch eine kleine Frage zur digitaltechnick und zwar:

wenn daten über einen serielen bus übertragen werden werden die bits von einen byte übertragen wie man sie aufschreibt also von links nach rechts oder genau andersrum?

gruss
markus

PicNick
11.01.2006, 07:08
Byte (Schlüsselwort) als Variablennamen verwenden (böses Faul)


Gut, ich bin für auspeitschen, dann geht's aber wieder, gelle ? :-)

super_castle
11.01.2006, 08:24
"Aber Byte (Schlüsselwort) als Variablennamen verwenden (böses Faul)
auch als Beispiel."

versteh ich nicht...warum "böses faul"? es gibt dafür keine regeln.
jeder macht es so wie es für einen passt.

ausserdem schreibst du bei den anderen verschiedenen variablen auch keine kennung davor/hinter.

Castle

darwin.nuernberg
13.01.2006, 19:42
"Aber Byte (Schlüsselwort) als Variablennamen verwenden (böses Faul)
auch als Beispiel."

versteh ich nicht...warum "böses faul"? es gibt dafür keine regeln.
jeder macht es so wie es für einen passt.

ausserdem schreibst du bei den anderen verschiedenen variablen auch keine kennung davor/hinter.

Castle

Na zum einen wird der Compiler diesen namen "normalerwiese" nicht akzepierten,
dann hat man schon einen Fehler,
wenn man sich nicht auskennt und schön brav alles so abtippt wie es dasteht.

Und falls es der Compiler zunächst ignoriert,
irgendwann wird ein Fehler entstehen.

Und dann such mal. Selbst fabrizierte Fehler sind gnadenlos.

Klar kann jeder so wie er will,
aber es sind nun mal doch so gewisse Regeln die sich im Laufe der Zeit (nicht ohne Grund) etabliert haben.

Nur ob man sich daran hält ist wieder was anderes.
In diesem speziellen Fall ist es sogar eine Regel an die man sich halten muss dies ist eine SYNTAX Verletztung

Das macht dann auch den Code leserlicher.

Eine Variable B_grün kann eigentlich nir ein Byte haben
eine Variable I_winkel kann dann logischerweise nur einen Integer
eine Vaiable Str_Wort einen String usw.


Also wenn man sich daran gewöhnt und größere Programme schreibt bleibts übersichtlicher.

In C kann ich so zeimlich alles machen auch einer Byte eine Integer zuweisen. Blos nicht wundern was dann passieren kann.........

In Basic (Bascom) wird wenigstens schon vorher (meistens jedenfalls) gemeckert.