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 매개변수는 문자열 끝에 유효한 널 종결자가 포함된 메모리에 대한 포인터여야 합니다. 또한 널 종결자까지 포함한 바이트의 읽기에도 유효해야 합니다.

매개변수

  • 숫자_클릭비트 - 레지스터를 생성할 클릭비트 수입니다
  • 이름 - 생성된 레지스터의 이름 문자열입니다. 이름은 유효한 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 목록에서 해당 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);

안전

다음과 같은 경우 동작이 정의되지 않습니다:

  • cregQkClassicalRegister.을 가리키는 유효하고 null이 아닌 포인터가 아닙니다.
  • circuitQkCircuit.을 가리키는 유효하고 null이 아닌 포인터가 아닙니다.
  • creg 하나 이상의 비트가 설정되어 있으며 out_bits , 개 이상의 qk_classical_register_num_bits(creg) 요소를 가진 배열을 가리키는 정렬된 비-null 포인터가 아닙니다.

매개변수

  • creg – 매핑할 클래식 레지스터를 가리키는 포인터.
  • circuit – clbits가 포함된 회로에 대한 포인터입니다.
  • out_bits – 매핑된 인덱스가 기록될 배열을 가리키는 포인터입니다. creg배열은 에 대해 최소 qk_classical_register_num_bits 개의 요소를 미리 할당해야 합니다. 각 요소에는 회로 비트 인덱스가 포함되거나, UINT32_MAX clbit이 해당 회로에 없는 경우에는 가 포함됩니다.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.