Skip to main content
IBM Quantum Platform

QkClassicalRegister

typedef struct QkClassicalRegister QkClassicalRegister

Un modo comune per istanziare più bit in una volta sola è quello di creare un registro. Un registro è un insieme denominato di bit. La creazione di un registro consente di assegnare a un insieme di bit un nome che può essere utilizzato come metadata per specifici bit in un circuito. Questo nome viene di solito mantenuto anche quando si esporta il circuito in altre lingue.

È possibile creare un registro chiamando, ad esempio, qk_classical_register_new():

#include <qiskit.h>

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

Il che crea un nuovo registro a 5 bit classici chiamato "my_creg".

Per aggiungere il registro a un circuito si utilizza la funzione 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

Mentre i circuiti tengono traccia dei registri, i registri stessi non apportano quasi nessuna differenza di comportamento ai circuiti.


Funzioni

qk_classical_register_new

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

Costruire un nuovo registro classico proprietario con un numero di clbit e un nome determinati

Esempio

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

Sicurezza

Il parametro name deve essere un puntatore alla memoria che contiene un terminatore nul valido alla fine della stringa. Deve inoltre essere valido per la lettura di byte fino al terminatore nul incluso.

Parametri

  • num_clbits - Il numero di clbits per il quale creare il registro
  • name - La stringa del nome del registro creato. Il nome deve essere composto da caratteri validi UTF-8.

Risultati

Un puntatore al registro creato

qk_classical_register_free

void qk_classical_register_free(QkClassicalRegister *reg)

Liberare un registro classico.

Esempio

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

Sicurezza

Il comportamento è indefinito se reg non è nullo o un puntatore valido a un QkClassicalRegister.

Parametri

  • reg - Un puntatore al registro da liberare.

qk_classical_register_name

char *qk_classical_register_name(const QkClassicalRegister *creg)

Ottieni il nome di un registro classico.

Restituisce una stringa C appena allocata contenente il nome del registro classico.

Esempio

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);

Sicurezza

Il comportamento è indefinito se creg non è un puntatore valido e non nullo a un QkClassicalRegister.

Parametri

  • creg – Un puntatore al registro classico.

Risultati

Un puntatore a una stringa terminata da 'NULL' appena allocata contenente il nome del registro. Chi effettua la chiamata deve liberare questa stringa utilizzando qk_str_free.

qk_classical_register_num_bits

size_t qk_classical_register_num_bits(const QkClassicalRegister *creg)

Ottieni il numero di bit classici presenti in un registro classico.

Restituisce la dimensione (numero di bit classici) del registro classico.

Esempio

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);

Sicurezza

Il comportamento è indefinito se creg non è un puntatore valido e non nullo a un QkClassicalRegister.

Parametri

  • creg – Un puntatore al registro classico.

Risultati

Il numero di bit classici nel registro.

qk_classical_register_circuit_bits

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

Recupera gli indici dei bit di circuito per tutti i clbit presenti in un registro classico.

Restituisce una mappatura da ciascun clbit nel registro classico al relativo indice nell'elenco dei clbit del circuito. Se un clbit del registro non è presente nel circuito, il suo indice nella mappatura sarà UINT32_MAX.

Esempio

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);

Sicurezza

Il comportamento è indefinito se:

  • creg non è un puntatore valido e non nullo a un QkClassicalRegister.
  • circuit non è un puntatore valido e non nullo a un QkCircuit.
  • creg contiene uno o più bit e out_bits non è un puntatore allineato e non nullo a un array con almeno qk_classical_register_num_bits(creg) elementi.

Parametri

  • creg – Un puntatore al registro classico da mappare.
  • circuito – Un puntatore al circuito contenente i clbit.
  • out_bits – Un puntatore a un array in cui verranno scritti gli indici mappati. L'array deve essere preallocato con almeno qk_classical_register_num_bits elementi per creg. Ogni elemento conterrà l'indice del bit del circuito oppure, UINT32_MAX se il clbit non è presente nel circuito.
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.