Skip to main content
IBM Quantum Platform

QkClassicalRegister

typedef struct QkClassicalRegister QkClassicalRegister

一度に複数のビットをインスタンス化する一般的な方法は、レジスタを作成することである。 レジスタとは、名前の付いたビットの集まりである。 レジスタを作成することで、ビットの集まりに名前を付けることができ、回路内の特定のビットのメタデータとして使用できる。 この名前は、通常、回路を交換言語にエクスポートする際にも保持される。

例えば、 qk_classical_register_new() を呼び出すことで、レジスタを作成することができる:

#include <qiskit.h>

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

これにより、 "my_creg" という新しい5ビットのレジスタが作成される。

そして、レジスタを回路に追加するには、 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

回路はレジスタを追跡するが、レジスタ自体は回路にほとんど動作の違いを与えない。


関数

qk_classical_register_new

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

指定されたビット数と名前で新しい古典的レジスタを作成する

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

安全

name パラメーターは、文字列の末尾に有効なヌル・ターミネーターを含むメモリーへのポインターでなければならない。 また、ヌル・ターミネーターまでのバイト数のリードに対しても有効でなければならない。

パラメーター

  • num_clbits - レジスタを作成するclbitsの数
  • name - 作成されるレジスタの名前文字列。 名前は UTF-8 の有効な文字で構成されなければならない。

戻り値

作成されたレジスタへのポインタ

qk_classical_register_free

void qk_classical_register_free(QkClassicalRegister *reg)

クラシックのレジスターが無料。

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

安全

reg が NULL または QkClassicalRegister への有効なポインタでない場合、動作は未定義となる。

パラメーター

  • reg - 解放するレジスタへのポインタ.

qk_classical_register_name

char *qk_classical_register_name(const QkClassicalRegister *creg)

古典レジスタの名前を取得します。

古典レジスタの名前を含む、新たに割り当てられた C 文字列を返します。

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

安全

QkClassicalRegisterが、への有効な(null ではない)ポインタでない場合 creg 、その挙動は未定義となる。

パラメーター

  • creg – クラシック・レジスタへのポインタ。

戻り値

レジスタ名を含む、新たに割り当てられたヌル終端文字列へのポインタ。 qk_str_free呼び出し元は、この文字列を を使用して解放する必要があります。

qk_classical_register_num_bits

size_t qk_classical_register_num_bits(const QkClassicalRegister *creg)

古典レジスタに含まれる古典ビットの数を取得します。

古典レジスタのサイズ(古典ビット数)を返します。

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

安全

QkClassicalRegisterが、への有効な(null ではない)ポインタでない場合 creg 、その挙動は未定義となる。

パラメーター

  • creg – クラシック・レジスタへのポインタ。

戻り値

レジスタ内の古典ビットの数。

qk_classical_register_circuit_bits

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

古典レジスタ内のすべてのclbitについて、回路ビットインデックスを取得します。

古典レジスタ内の各 clbit から、回路の clbit リスト内の対応するインデックスへの対応関係を出力します。 UINT32_MAXレジスタのclbitが回路内に存在しない場合、マッピングにおけるそのインデックスは となります。

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

安全

以下の場合、挙動は未定義となります:

  • QkClassicalRegister``creg は、. への有効で null ではないポインタではありません。
  • QkCircuit``circuit は、. への有効で null ではないポインタではありません。
  • creg 1つ以上のビットが設定されており、 out_bits かつ、少なくとも qk_classical_register_num_bits(creg) 個の要素を持つ配列への、アラインメントが取れており、NULLではないポインタではない。

パラメーター

  • creg – マッピング対象のクラシックレジスタへのポインタ。
  • circuit – clbits を含む回路へのポインタ。
  • out_bits – マップされたインデックスが書き込まれる配列へのポインタ。 creg配列は、少なくとも qk_classical_register_num_bits 個の要素を持つように、事前に割り当てられていなければなりません。 各要素には、回路のビットインデックス、あるいは UINT32_MAX clbit がその回路に含まれていない場合は が格納されます。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。