Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Bitmanipulation

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 07. Mai 2004 6:20   Titel: Bitmanipulation

Hallo C-ler

Ich wollte dann doch mal irgendwann die Sprache der Sprachen erlernen und beschäftige mich gerade mit Bit-Manipulation.

Ziel ist es, eine Funktion zu schreiben, die n Bits am Position p aus x durch die letzten n Bits in y ersetzt.

So sieht's bis jetzt aus:

Code:

unsigned setbits(unsigned int x, int n, int p, unsigned int y){

   unsigned int mask;

   /* Zahl:   01001001
    * Position:   76543210
    * liefert n Bits von y ab 0
    * Erzeugt dann eine Bitmaske mit allen Bits auf 0
    * außer den ersten n, welche denen in y entsprechen.
    */
   mask = ( y & ~(~0 << n));

   /* Schiebt p Bits gleich 0 nach */
   mask << p;

   return x & mask;
}


Ich bekome allerdings das warning: statement with no effect, welches sich auf die Zeile

mask << p;

bezieht.

Kann mir jemand das erklären?
 
Benutzer-Profile anzeigen Private Nachricht senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 07. Mai 2004 9:35   Titel:

Der <<-Operator liefert Dir einen Wert zurück, der dem Inhalt von mask um p Bits linksgeshiftet entspricht. Du verwendest den Wert allerdings nicht! Bei den "normalen" Rechenoperatoren fällt so etwas schneller ins Auge: Wenn da einfach "a + b;" gestanden hätte, wäre die Warnung des Compilers direkt verstanden worden. Es muss also
Code:
mask = mask << p;
heissen.

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 07. Mai 2004 10:00   Titel:

thx!!!
 
Benutzer-Profile anzeigen Private Nachricht senden

Gast






BeitragVerfasst am: 07. Mai 2004 12:57   Titel:

jochen hat folgendes geschrieben::
Der <<-Operator liefert Dir einen Wert zurück, der dem Inhalt von mask um p Bits linksgeshiftet entspricht. Du verwendest den Wert allerdings nicht! Bei den "normalen" Rechenoperatoren fällt so etwas schneller ins Auge: Wenn da einfach "a + b;" gestanden hätte, wäre die Warnung des Compilers direkt verstanden worden. Es muss also
Code:
mask = mask << p;
heissen.

Jochen


mask <<= p;

hätte auch gereicht Razz
 

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 12. Mai 2004 10:02   Titel: Bitmanipulation die zweite

Schönen guten Morgen Wink

Es geht immer noch um das gleiche Programm. Ich saß jetzt ein paar Tage nicht mehr dran... Der Befehl
Code:

return x & mask;

oder auch
Code:

return ( x & mask );

gibt 4 zurück, wenn x==4 und mask==6. Soweit ich die &-Operation verstanden habe, ist das falsch und es müsste eigentlich 6 zurückgegeben werden...

Kann mir jemand das erklären???
 
Benutzer-Profile anzeigen Private Nachricht senden

Tom2
Gast





BeitragVerfasst am: 12. Mai 2004 11:30   Titel:

also ich habe das so verstanden:
4 ist 100
6 ist 110

4 & 6 ist dann 100 also 4!!

denn:
The bitwise-AND operator compares each bit of its first operand to the corresponding bit of its second operand. If both bits are 1, the corresponding result bit is set to 1. Otherwise, the corresponding result bit is set to 0.

Die Beschreibung stammt zwar aus der MS-Hilfe, aber das sollte doch ANSI-Standard sein, oder?

Gruss
Tom2
 

JochenAlsGast
Gast





BeitragVerfasst am: 12. Mai 2004 14:08   Titel:

Das Ergebnis 6 hättest Du bei einer OR-Verknüpfung erhalten:

100bin = 4dez
110bin = 6dez

Oder-Verknüpft (6 | 4) ergibt sich 110bin (2^0: 0|0=0, 2^1: 0|1=1, 2^2: 1|1=1) gleich 6dez.

Jochen
(der von einem öffentlichen Terminal aus postet und sein PW vergessen hat Sad )
 

Tom2
Gast





BeitragVerfasst am: 12. Mai 2004 14:47   Titel:

Das waere jetzt der ...
| The bitwise-inclusive-OR operator compares each bit of its first operand to the corresponding bit of its second operand. If either bit is 1, the corresponding result bit is set to 1. Otherwise, the corresponding result bit is set to 0.

Dann gibts noch den...
^ The bitwise-exclusive-OR operator compares each bit of its first operand to the corresponding bit of its second operand. If one bit is 0 and the other bit is 1, the corresponding result bit is set to 1. Otherwise, the corresponding result bit is set to 0.

womit dann 2dez oder 010bin rauskommen sollte.

Tom2
 

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 13. Mai 2004 7:57   Titel:

Yo, vielen Dank euch allen. Wink

Die Sache ist gelöst. Wink
 
Benutzer-Profile anzeigen Private Nachricht senden

Don Philippe



Anmeldungsdatum: 14.05.2004
Beiträge: 8

BeitragVerfasst am: 23. Mai 2004 23:10   Titel:

Giebts zum Thema Bitmanipulation ein schönes Tutorial im Netz?

MfG

Philipp
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy