AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bit Byte und shr

Ein Thema von Daniel B · begonnen am 3. Mär 2003 · letzter Beitrag vom 4. Mär 2003
Antwort Antwort
Seite 1 von 2  1 2   
Daniel B
(Gast)

n/a Beiträge
 
#1

Bit Byte und shr

  Alt 3. Mär 2003, 21:58
Hallöchen,

komm gerade nicht mit dem Bit-Shiften weiter.
Delphi-Quellcode:
var
  sCom: String;
begin
  repeat
    STC(#113#0);
    STC(#106);
    ComPort1.ReadStr(sCom, 2);
    Application.ProcessMessages;
  until
    ((sCom[1] = #106) and (sCom[2] >= Char(32))); ***
  begin
    BitBtnLesen.Enabled := True;
    BitBtnSchreiben.Enabled := True;
  end;
end;
Es geht um die zeile mit dem ***.
Und zwar hab ich mir folgendes vorgestellt:
((sCom[1] = #106) and (sCom[2] shr 32)); So klappt es nicht.
"[Fehler] Unit1.pas(248): Operator ist auf diesen Operandentyp nicht anwendbar"

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2
  Alt 3. Mär 2003, 22:20
Code:
(sCom[1] = #106)
müsste einen boolean geben.

Code:
(sCom[2] shr 32)
ein Byte.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3
  Alt 3. Mär 2003, 22:24
Hallo,

das bringt mir nichts. Ich lese zwei Bytes. Das erste Byte ist #106 und im zweiten Byte muss ich nachsehen ob das 6te Bit eine 1 ist.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#4
  Alt 3. Mär 2003, 22:34
until ((byte1 = #106) and ((byte2 and #64 {müsste das sechste bit sein}) = # 64)) testet, ob byte eins 106 ist, und ob im zweiten das sechste bit gesetzt ist. Falls du das meinst.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#5
  Alt 3. Mär 2003, 22:37
Zitat von Nailor:
until ((byte1 = #106) and ((byte2 and #64 {müsste das sechste bit sein}) = # 64)) testet, ob byte eins 106 ist, und ob im zweiten das sechste bit gesetzt ist. Falls du das meinst.
Das ist ja im prinzip das gleiche wie:
((sCom[1] = #106) and (sCom[2] >= {Char(32)} #32)); Nur mit dem Unterschied, ich schaue ob der Wert des zweiten Bytes >= 32 ist. Den 32 ist Bit 6.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6
  Alt 3. Mär 2003, 22:42
a) ist das ">=" falsch, dann kann ja auch nur das siebte gesetzt sein, du bräuchtest ein "="

b) gibt die erste Aktion (logical Operator) einen boolean, die zweite (bitwise Operation) ein bit. Danach macht das and in der Mitte einen Aufstand, weil schlecht

if true and #27 zu einem vernünftigen Ergebnis führen kann. Bei meiner Version sind beides booleans, und es sollte gehen.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7
  Alt 3. Mär 2003, 22:45
((sCom[1] = #106) and ((sCom[2] and #32) = #32));

Bringt gleichen Fehler wie anfangs.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#8
  Alt 3. Mär 2003, 22:51
Bei der rechten Hälfte musst du die "#" weglassen. Das "and" verlangt nach Integern.

if ((#106 = #106) and ((33 and 32) = 32)) then close; //beendet das Programm. Wurde von mir getestet und läuft!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.459 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9
  Alt 3. Mär 2003, 22:53
if ((sCom[1] = #106) and ((Byte(sCom[2]) and 32) <> 0)) then Funktioniert. Man muss den Char nur in ein Byte typecasten. Das "<>0" anstatt dem "=32" spart ein klein wenig rechenzeit, da die interne Substraktion entfällt.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#10
  Alt 3. Mär 2003, 22:56
Zitat von jbg:
if ((sCom[1] = #106) and ((Byte(sCom[2]) and 32) <> 0)) then Funktioniert. Man muss den Char nur in ein Byte typecasten. Das "<>0" anstatt dem "=32" spart ein klein wenig rechenzeit, da die interne Substraktion entfällt.
Danke Dir, klappt wunderbar. Auch an Nailor Danke!!

Grüsse, Daniel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 02:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf