2014-12-22 6 views
12

Ich mache einige X11 Ctypes Codierung, ich weiß nicht C aber brauche Hilfe, das zu verstehen.Was bedeutet (~ 0L)?

In der C-Code unten (möglicherweise C++ ich bin nicht sicher) sehen wir (~0L) was bedeutet das? In 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

Antwort

18

0L ist ein long Integer-Wert mit allen Bits auf Null gesetzt - das ist im Allgemeinen die Definition von 0. Die ~ bedeutet, alle Bits zu invertieren, was Sie mit einer long Ganzzahl mit allen Bits auf eins gesetzt.

In der Zweierkomplementarithmetik (die fast universell ist) ist ein vorzeichenbehafteter Wert mit allen auf eins gesetzten Bits -1.

Der Grund für die Verwendung von anstelle von -1L ist klarer über die Absicht - es soll nicht als eine Zahl überhaupt verwendet werden, sondern eher als eine Sammlung von Bits.

+0

Danke vielmals! Also die Nummer, die ich in meinen Ctypes verwenden sollte, ist "1111111111111111111111111111111111", wenn die Software 32bit und 64 1 ist, wenn es 64bit '1111111111111111111111111111111111111111111111111111111111111111' ist? – Noitidart

+2

Das Problem ist, dass, wenn der Parameter, den Sie aufrufen, ein 'long long' ist, '~ 0L' nur einige der Bits invertiert, während' -1' (kein suffix erforderlich) alle invertiert. –

+2

@Noitidart hängt es von Ihrer Definition von 'long' ab. Microsoft definiert es als nur 32 Bit, sogar für 64-Bit-Software. –

3

Bitwise Kompliment von Null langer Art.

+0

Ich bin kein Informatiker nur ein Hobbyist. Haha, das ist wie Alien, rede mit mir: P Ist das '-1'? Ich brauche eine Nummer, die ich in meine Ctypes schreiben kann: P – Noitidart

+3

@No: Fast, zumindest bei Zweierkomplement-Implementierungen: '-1L' Wie auch immer, warum nicht einfach den gleichen Ausdruck in C++ verwenden? – Deduplicator

+0

Danke @Deduplicator Ich bin jetzt mehr verwirrt haha ​​was zwei completment implementations? Haha heißt das 64bit oder 32bit Software? Wenn ich also "-1" setze, wäre das okay? Wir haben kein 'L' in Ctypes. – Noitidart