Wie finden Sie heraus, wie SBCL (und vielleicht andere Common-Lisp Compiler) eine typisierte Variable darstellt. Beispielsweise übersetzt SBCL eine Variable, die als (member +1 -1)
in Typ (or (integer 1 1) (integer -1 -1))
typisiert wird. Aber ist das ein bisschen, ein Fixnum oder vielleicht sogar Bignum?Darstellung einer binären Variablen
Antwort
Gut. Es ist leicht zu überprüfen:
(type-of 1)
; ==> BIT
(type-of -1)
; ==> (integer -281474976710656 (0))
So -1
und 1
verschiedenen Typen sind, wie Sie Mehrfachvererbung in CL haben, so dass es wahr ist, dass 1
und -1
viele viele andere Arten sie gemeinsam haben, sind:
(typep 1 'integer) ; ==> t
(typep 1 'fixnum) ; ==> t
(typep 1 'number) ; ==> t
(typep 1 't) ; ==> t
(typep 1 'bignum) ; ==> nil
(typep -1 'integer) ; ==> t
(typep -1 'fixnum) ; ==> t
(typep -1 'number) ; ==> t
(typep -1 't) ; ==> t
(typep -1 'bignum) ; ==> nil
Und natürlich:
(typep -1 '(member +1 -1)) ; ==> t
(typep 1 '(member +1 -1)) ; ==> t
1
Also nur ein bisschen beide sind fixnum und keine sind bignums. Die Werte werden höchstwahrscheinlich im Zeiger in den CL-Implementierungen gespeichert, die dies tun. Beachten Sie, dass dieser Typ wenig mit dem eigentlichen Speicher zu tun hat. Beide Werte werden höchstwahrscheinlich als vollständiges Maschinenwort gespeichert, in meinem Fall 8 Bytes (64 Bits) im Zeiger. Für ein Bignum haben Sie die 8 Bytes, um auf ein Heap-Objekt zu zeigen, das zusätzlichen Speicherplatz für den tatsächlichen Wert zugewiesen hat.
SBCL kann spezialisierten Speicher für bestimmte Nummernbereiche haben, zum Beispiel in Vektoren. '(upgraded-array-element-type '(integer 0 1))' -> 'BIT' –
@RainerJoswig Also könnte es Bits in Vektoren kompakter speichern, aber wahrscheinlich nicht OPs zwei alternative Werte, die mehr Mapping erfordern würde? – Sylwester
Grundsätzlich ein '(SIGNED-BYTE 8)' Array. –
- 1. Zählen der 1en auf der linken Seite einer binären Darstellung
- 2. Darstellen von binären Variablen in R
- 3. Begriff zur Darstellung aller möglichen Werte einer Variablen
- 4. Durchführen einer binären Suche
- 5. Datenbank Darstellung einer Zeitleiste
- 6. ByteString Darstellung einer Doppelkonvertierung
- 7. BInary-Tree-Darstellung mit Array
- 8. Anzahl der 1s in einer binären Zahl
- 9. Genetic Algorithm Binäre Darstellung
- 10. Entstörung einer binären Bombe: phase_5
- 11. os.urandom und Byte-Darstellung
- 12. Gebe passende Namen anstelle von binären Variablen in R zurück
- 13. BinaryString zur albabetischen Darstellung
- 14. Wie kann ich eine String-Darstellung der binären Notation in tatsächliche binäre Notation
- 15. lineare Zielfunktion mit nichtlinearen Randbedingungen und binären Variablen
- 16. Logarithmische Darstellung
- 17. Warum gibt es eine führende 1 in der binären Darstellung von DCPU-16 Anweisungen
- 18. Wie viele Bits in der binären Darstellung der positiven ganzen Zahl n?
- 19. Summe jeder Verzweigung in einer binären Suchstruktur
- 20. Erstellen einer nicht binären Baumstruktur in C++
- 21. Implementieren einer binären Semaphor-Klasse in C++
- 22. Konvertieren einer binären Zeichenfolge in ein Zweierkomplement
- 23. Streifen 0s in einer binären in Erlang
- 24. Javascript einen binären Wert einer Zahl
- 25. Bearbeiten eines Knotens in einer binären Baumstruktur
- 26. Konvertieren einer binären Zeichenfolgendarstellung in ein Bytearray
- 27. Zugriff auf Inhalt von R.string mit einer Variablen zur Darstellung des Ressourcennamens
- 28. ein große Anzahl von binären in JavaScript
- 29. Binäre Darstellung einer Zahl in C
- 30. Morphia-Fehler: ungültige hexadezimale Darstellung einer ObjectId
_Hinweis zur Klärung eines Missverständnisses in meiner Ausgangsfrage (oben): Variablen haben keine Typen. Die Lisp-Objekte, auf die Variablen (und andere Platzreferenzen) verweisen, sind jedoch typisiert. Eine bessere Aussage des Themas könnte sein: Repräsentation des Wertes einer binären Variable._ – davypough