Was bedeutet (~0L)?
Ich bin dabei einige X11-ctypes Codierung, ich weiß nicht C, brauchen aber etwas Hilfe, das zu verstehen.
In den C-code weiter unten (vielleicht C++ bin ich nicht sicher) sehen wir (~0L)
was bedeutet das? Im Javascript-und Python - ~0
bedeutet -1
.
812 int result = GetProperty(window, property_name,
813 (~0L), //(all of them)
814 &type, &format, &num_items, &properties);
Dank
Wie Schreibe ich eine kurze 0, wie 0? Ich sehe: stackoverflow.com/questions/208433/...
InformationsquelleAutor Noitidart | 2014-12-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
0L
ist einlong
integer-Wert mit allen bits auf null gesetzt - das ist in der Regel die definition von0
. Die~
Mittel zum invertieren alle bits, die Sie Blätter mit einemlong
ganze Zahl mit allen bits auf eins gesetzt.In Zweierkomplement-Arithmetik (was fast universal) unterzeichnet-Wert mit dem alle bits auf eins gesetzt ist
-1
.Der Grund für die Verwendung
~0L
statt-1L
ist, klarer zu werden über die Absicht - es ist nicht gedacht als eine Zahl, sondern als eine Sammlung von bits.11111111111111111111111111111111
wenn die software in 32bit und 64 1 ' s, wenn Ihr 64bit1111111111111111111111111111111111111111111111111111111111111111
?Das Problem ist, dass wenn die parameter, die Sie aufrufen, ist eine
long long
dann~0L
kehrt nur einige der bits, in der Erwägung, dass-1
(kein suffix erforderlich) invertiert alle von Ihnen.es hängt von Ihrer definition von
long
. Microsoft definiert es nur als 32 bit auch für 64-bit-software.Vielen Dank an alle! Ich wirklich zu schätzen.
wenn es Python-ctypes verwenden Sie einfach
c_long(~0)
. Die Größe einesc_long
hängt von der Plattform ab.InformationsquelleAutor Mark Ransom
Bitweise Kompliment von null der lange Typ.
-1
? Ich brauche eine Nummer in meinem ctypes 😛Fast, zumindest auf Zweierkomplement-Implementierungen:
-1L
Sowieso, warum man nicht einfach den gleichen Ausdruck in C++?Es ist alle bits auf 1 gesetzt.
es kann sein -1L aber du kannst, denke daran, wie diese. Wenn eine 64bit-0L 8 bytes mit Nullen (und jedes byte ist 8 bits sind Nullen), dann wird die ~0L-Betrieb bedeutet, dass Sie nehmen alle 0-bits in diesen bytes und drehen Sie 1. Also für jedes byte, das beginnt [00000000] in bits, das Ergebnis ist [11111111].
bedeutet genau, wie Rechnung sagt. Zu verwenden -1L, etc. wird weniger Trinkwasser als
-1L
möglicherweise nicht über eine Darstellung der alle bits gesetzt.InformationsquelleAutor Bill