Bitweises ODER von Konstanten

8

Beim Lesen einiger Dokumente hier stieß ich auf folgendes:

%Vor%

Ich habe keine Ahnung, wie das funktioniert. Ich lese die bitweisen Operatoren in C nach, aber ich verstehe nicht, wie man drei (oder mehr!) Konstanten in ein int einfügen und später irgendwie aus dem int extrahieren kann. Wenn ich die Dokumentation weiter unten durchführe, habe ich auch das gefunden, was wahrscheinlich zusammenhängt:

%Vor%

Wie funktionieren die (1 << 3) Anweisungen / Variablen? Es tut mir leid, wenn das belanglos ist, aber könnte jemand bitte mich aufklären, indem er entweder erklärt oder vielleicht einen Link zu einer guten Erklärung postet?

    
ryyst 29.05.2010, 20:23
quelle

5 Antworten

9

Grundsätzlich werden die Konstanten nur durch ein Bit dargestellt. Wenn Sie also eine 32-Bit-Ganzzahl haben, können Sie 32 Konstanten darin einfügen. Deine Konstanten müssen Zweierpotenzen sein, also nehmen sie nur ein gesetztes Bit zur Darstellung.

Zum Beispiel:

%Vor%

dann können Sie

tun %Vor%

Wie Sie sehen können, repräsentiert jedes Bit diese bestimmte Konstante. So können Sie binäre UND in Ihrem Code und testen für das Vorhandensein jeder Konstante, wie:

%Vor%

Ich empfehle Ihnen, über binäre Operationen zu lesen (sie funktionieren wie LOGICAL-Operatoren, aber auf der Bit-Ebene), wenn Sie dieses Zeug durchforsten, wird es Sie ein bisschen besser für einen Programmierer machen.

Prost.

    
Francisco Soto 29.05.2010, 20:31
quelle
2

Wenn Sie sich eine Zahl im Binärformat ansehen, ist jede Ziffer entweder an ( 1 ) oder ausgeschaltet ( 0 ).

Sie können bitweise Operatoren verwenden, um die einzelnen Bits effizient zu setzen oder abzufragen, um zu sehen, ob sie gesetzt sind oder nicht.

Nehmen Sie den 8-Bit-Wert 156. Im Binärformat ist dies 10011100 .

Die gesetzten Bits entsprechen den Bits 7 , 4 , 3 und 2 (Werte 128 , 16 , 8 , 4 ). Sie können diese Werte relativ einfach mit 1 << (position) berechnen. Also, 1 << 7 = 128 .

    
Joe 29.05.2010 20:29
quelle
1

Die Zahl 1 wird als 0000000000000000000000000000000001 dargestellt (1 & lt; & lt; n) bedeutet, daß die 1-in-1-Darstellung um n Stellen nach links verschoben wird Also (1 & lt; & lt; 3) wäre 0000000000000000000000000000001000 In einem Int können Sie 32 Optionen haben, von denen jede ein- oder ausgeschaltet werden kann. Die Optionsnummer n ist eingeschaltet, wenn das n-te Bit 1 ist     

Itay Karo 29.05.2010 20:28
quelle
0

1 << y ist im Grunde dasselbe wie 2 to the power of y

Allgemeiner ist x << y dasselbe wie x multiplied by 2 to the power of y .

In binary x << y bedeutet das Verschieben aller Bits von x nach links von y places und das Hinzufügen von Nullen an die Stelle der verschobenen Bits:

00010 << 2 = 01000

Also:

%Vor%     
IVlad 29.05.2010 20:30
quelle
0

<< ist der linke Shift-Operator, er verschiebt die Bits des ersten Operanden um die Anzahl der im rechten Operanden angegebenen Positionen (wobei Nullen von rechts in die verschobenen Positionen kommen).

In Ihrer Enumeration erhalten Sie Werte, deren eacg ein anderes Bit als 1 hat. Wenn Sie also etwas wie unitDate konstruieren, können Sie später herausfinden, welche Flags es enthält, indem Sie den Operator & verwenden, z. unitDate & NSMonthCalendarUnit == NSMonthCalendarUnit wird wahr sein.

    
Alex Korban 29.05.2010 20:33
quelle

Tags und Links