Skip to main content
IBM Quantum Platform

QkClassicalRegister

typedef struct QkClassicalRegister QkClassicalRegister

Eine gängige Methode, mehrere Bits auf einmal zu instanziieren, ist die Erstellung eines Registers. Ein Register ist eine benannte Sammlung von Bits. Die Erstellung eines Registers ermöglicht es, einer Sammlung von Bits einen Namen zu geben, der als Metadaten für bestimmte Bits in einer Schaltung verwendet werden kann. Dieser Name wird in der Regel auch beibehalten, wenn der Schaltkreis in andere Sprachen exportiert wird.

Sie können ein Register erstellen, indem Sie zum Beispiel qk_classical_register_new() aufrufen:

#include <qiskit.h>

QkClassicalRegister *creg = qk_classical_register_new(5, "my_creg");

Dadurch wird ein neues klassisches 5-Bit-Register mit dem Namen "my_creg" erstellt.

Um das Register in eine Schaltung einzufügen, verwenden Sie die Funktion qk_circuit_add_classical_register() :

QkCircuit *qc = qk_circuit_new(0, 0);
qk_circuit_add_classical_register(qc, creg);
uint32_t num_qubits = qk_circuit_num_qubits(qc); // 5

Während die Schaltungen die Register nachverfolgen, bewirken die Register selbst fast keine Verhaltensunterschiede bei den Schaltungen.


Funktionen

qk_classical_register_new

QkClassicalRegister *qk_classical_register_new(uint32_t num_clbits, const char *name)

Konstruieren Sie ein neues klassisches Register mit einer bestimmten Anzahl von Bits und einem bestimmten Namen

Beispiel

QkClassicalRegister *cr = qk_classical_register_new(5, "five_qubits");

Sicherheit

Der Parameter name muss ein Zeiger auf einen Speicher sein, der einen gültigen Nullterminator am Ende der Zeichenkette enthält. Sie muss auch für das Lesen von Bytes bis einschließlich des Nul-Terminators gültig sein.

Parameter

  • num_clbits - Die Anzahl der Clbits, für die das Register erstellt wird
  • name - Der Namensstring für das erstellte Register. Der Name muss aus gültigen UTF-8 Zeichen bestehen.

Rückgabe

Ein Zeiger auf das erstellte Register

qk_classical_register_free

void qk_classical_register_free(QkClassicalRegister *reg)

Ein klassisches Register freigeben.

Beispiel

QkClassicalRegister *cr = qk_classical_register_new(1024, "creg");
qk_classical_register_free(cr);

Sicherheit

Das Verhalten ist undefiniert, wenn reg nicht entweder null oder ein gültiger Zeiger auf eine QkClassicalRegister ist.

Parameter

  • reg - Ein Zeiger auf das freizugebende Register.

qk_classical_register_name

char *qk_classical_register_name(const QkClassicalRegister *creg)

Den Namen eines klassischen Registers abrufen.

Gibt einen neu zugewiesenen C-String zurück, der den Namen des klassischen Registers enthält.

Beispiel

QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
char *name = qk_classical_register_name(cr);
printf("Register name: %s\n", name);
qk_str_free(name);
qk_classical_register_free(cr);

Sicherheit

QkClassicalRegisterDas Verhalten ist nicht definiert, wenn creg kein gültiger, nicht-null-Zeiger auf ein ist.

Parameter

  • creg – Ein Zeiger auf das klassische Register.

Rückgabe

Ein Zeiger auf eine neu zugewiesene, null-terminierte Zeichenkette, die den Registernamen enthält. Der Aufrufer muss diese Zeichenkette mit qk_str_free… freigeben.

qk_classical_register_num_bits

size_t qk_classical_register_num_bits(const QkClassicalRegister *creg)

Ermittle die Anzahl der klassischen Bits in einem klassischen Register.

Gibt die Größe (Anzahl der klassischen Bits) des klassischen Registers zurück.

Beispiel

QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
size_t num_clbits = qk_classical_register_num_bits(cr);
printf("Number of clbits: %zu\n", num_clbits);  // Prints: 3
qk_classical_register_free(cr);

Sicherheit

QkClassicalRegisterDas Verhalten ist nicht definiert, wenn creg kein gültiger, nicht-null-Zeiger auf ein ist.

Parameter

  • creg – Ein Zeiger auf das klassische Register.

Rückgabe

Die Anzahl der klassischen Bits im Register.

qk_classical_register_circuit_bits

void qk_classical_register_circuit_bits(const QkClassicalRegister *creg, const QkCircuit *circuit, uint32_t *out_bits)

Rufe die Schaltungsbit-Indizes für alle clbits in einem klassischen Register ab.

Gibt eine Zuordnung von jedem clbit im klassischen Register zu seinem entsprechenden Index in der clbit-Liste der Schaltung aus. UINT32_MAXWenn ein Clbit aus dem Register in der Schaltung nicht vorhanden ist, lautet sein Index in der Zuordnung.

Beispiel

QkCircuit *qc = qk_circuit_new(0, 2);
QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
qk_circuit_add_classical_register(qc, cr);

uint32_t bit_indices[3];

qk_classical_register_circuit_bits(cr, qc, bit_indices);

// bit_indices now contains [2, 3, 4] since all clbits are in the circuit
// and the circuit has 2 anonymous clbits

qk_classical_register_free(cr);
qk_circuit_free(qc);

Sicherheit

Das Verhalten ist undefiniert, wenn:

  • creg ist kein gültiger, nicht-null-Zeiger auf ein QkClassicalRegister.
  • circuit ist kein gültiger, nicht-null-Zeiger auf ein QkCircuit.
  • creg enthält ein oder mehrere Bits und out_bits ist kein ausgerichteter, nicht-Null-Zeiger auf ein Array mit mindestens qk_classical_register_num_bits(creg) Elementen.

Parameter

  • creg – Ein Zeiger auf das klassische Register, das abgebildet werden soll.
  • circuit – Ein Zeiger auf den Schaltkreis, der die clbits enthält.
  • out_bits – Ein Zeiger auf ein Array, in das die zugeordneten Indizes geschrieben werden. cregDas Array muss vorab mit mindestens qk_classical_register_num_bits Elementen für zugewiesen werden. Jedes Element enthält entweder den Schaltkreis-Bit-Index oder UINT32_MAX den Wert „“, falls das clbit nicht im Schaltkreis enthalten ist.
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.