2016-12-06 2 views
0

Zum Beispiel für eine Struktur:Wie können Strukturelemente mit bitweisen Operationen bearbeitet werden?

struct name{ 
int a; 
char b; 
float c; 
}g; 
g.b='X'; 

Nun möchte Ich mag Strukturelement b mit Bitoperatoren zuzugreifen (<<, >> etc.) und es zu 'A' ändern. Ist es möglich, mit solchen Operatoren auf Strukturelemente zuzugreifen?

+0

Die einzigen Operatoren, die auf Strukturelemente zugreifen, sind '.' und' -> '. –

+0

Sie meinen statt "g.b = 'A'" wollen Sie etwas wie 'somoperation (g) =' A''? – Iluvatar

+0

Ja Iluvatar, mit bitweisen Operationen durch Zugriff auf das einzelne Mitglied. – abinjacob

Antwort

0

Bitwise-Operationen auf Structs machen wegen der Auffüllung nicht viel Sinn und, was noch wichtiger ist, es tötet nur den Zweck, eine Struktur an erster Stelle zu haben. Bitweises Operieren ist, wie der Name sagt, für Bit's in Variable zu arbeiten. Struct Variablen werden normalerweise (wenn sie nicht gepackt sind) aufgefüllt, so dass man nicht garantieren kann, wo sie auf sie zugreifen können, aber wenn man fragen möchte, ob man das kann, ja, aber man müsste Wirf struct g, um einen 32-Bit-Wert zu sagen. Wenn zwei Variablen in diesem Raum wären, könntest du die Bit-Operation für diesen Caste-Wert verwenden. Wenn es notwendig ist, können Sie union von Ihrer Struktur erstellen und rohe Variable als einen union-Teil haben und als die andere Option strukturieren, dann können Sie bitweise auf rohe Variable manipulieren.

0

Sie können die Daten ändern, indem Sie den Offset von b erhalten. Ich weiß, dieser Code sieht nicht gut aus. Aber er dient deinem Zweck.

#include <stdio.h> 

struct name 
{ 
     int a; 
     char b; 
     float c; 
}g; 

int main() 
{ 
     g.b='X'; 
     int y=0; 

     int offset = &((struct name *)NULL)->b; // Find Offset of b 
     char *p = (char *)&g; 
     int i=0; 

     for(i=0;i<offset;i++) 
     { 
       ++p; 
     } 

     *p=*p|(1<<0); 

     // *p = 'A'; 

     printf("........%c\n",g.b); 

} 
+0

Hallo, gute Arbeit Sumit. Ich habe aus Ihrem Code verstanden, wie wir auf bestimmte Member innerhalb der Struktur zugreifen können, indem wir den by-by-byte-Zugriff mit char-Pointer nutzen. Aber kannst du mir helfen, über Bits auf die Mitglieder zuzugreifen? Diese Frage wurde in einem Interview in einer Firma gestellt, also bin ich neugierig! – abinjacob

+0

@abinjacob Ich habe meinen Code geändert. Aber ich denke, Interviewer hat über Bit gefragt, das in der Struktur archiviert ist, und koper89 hat gesagt, dass Bitwise-Operationen auf struct's wegen der Polsterung nicht viel Sinn machen. –

Verwandte Themen