AGB  ·  Datenschutz  ·  Impressum  







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

Prüfen ob Bitposition gesetzt

Ein Thema von MatthiasW · begonnen am 7. Mär 2005 · letzter Beitrag vom 7. Mär 2005
Antwort Antwort
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#1

Prüfen ob Bitposition gesetzt

  Alt 7. Mär 2005, 14:33
Wie kann ich prüfen ob eine Bitposition gesetzt ist?

Also bei "1011" ob an der ersten und letzten stelle eine 1 steht?

Danke für eure Hilfe
Hilfe wir stürzen ab!!!
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Prüfen ob Bitposition gesetzt

  Alt 7. Mär 2005, 14:36
Hallo Matthias,

es kommt auf den Variablentyp an. Bei einem String: If (sVar[1] = '1') and (sVar[4] = '1') then Ist die Zahl als Integer abgespeichert (also 1011 binär=11 dezimal): if (iVar and 9) = 9 then Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#3

Re: Prüfen ob Bitposition gesetzt

  Alt 7. Mär 2005, 14:38
Delphi-Quellcode:
function TBiPi.GetBit(Index: Word): Boolean;
begin
  Result := Image[Index DIV 8] AND ($01 SHL (Index MOD 8)) > $00;
end;
Image ist ein Array of Byte.
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: Prüfen ob Bitposition gesetzt

  Alt 7. Mär 2005, 14:46
Zitat von MatthiasW:
Wie kann ich prüfen ob eine Bitposition gesetzt ist?

Also bei "1011" ob an der ersten und letzten stelle eine 1 steht?
Bei deinem Problem ist es also ganz einfach.
Delphi-Quellcode:
BitIstGesetzt := X and 1 <> 0;

If X and 1 <> 0 Then ...
X ist irgendein Integer-Typ (Integer, Byte, Word ... siehe Delphi-Referenz durchsuchenInteger-Typen),
BitIstGesetzt ist demnach Boolean
und die 1 steht für ...000001 (Binär).

Also
Code:
1011 and 0001 = 0001     // Ergebnis <> 0 dann ist Bit gesetzt
1010 and 0001 = 0000     // Ergebnis = 0 dann ist nicht gesetzt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Prüfen ob Bitposition gesetzt

  Alt 7. Mär 2005, 14:52
Noch eine möglicjkeit:

Delphi-Quellcode:
type
  T32Bits = set of (0..31);
...
var
  I:integer;
begin
  i := ???;
  ...
  if 0 in T32Bits(i) then juhuu(0); // bit 0 prüfen
  if 3 in T32Bits(i) then juhuu(3); // bit 3 prüfen
end;

//edit: TBits -> T32Bits
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Prüfen ob Bitposition gesetzt

  Alt 7. Mär 2005, 15:31
Danke für eure Anworten. Den Typ den ich testen möchte ist ein Cardinal, das ist aber bekanntlich ein Zahlentyp und deswegen verwende ich die Integer variante.

Greetings
Hilfe wir stürzen ab!!!
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Prüfen ob Bitposition gesetzt

  Alt 7. Mär 2005, 18:05
So einfach kann man das überprüfen:
(wert ist der zu prüfende Cardinal, bitIndex die Nummer des Bits (Zählung beginnt bei null, als muss bitIndex im Bereich 0..31 liegen))
Delphi-Quellcode:
function BitGesetzt(wert: Cardinal; bitIndex: Byte): Boolean;
begin
 Result:= (wert and (1 shl bitIndex)) <>0;
end;
Als Ergebnis erhält man True, wenn das betreffende Bit gesetzt ist.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:12 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