es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo convertir código C a expresiones booleanas?

Me gustaría exportar un código C simple en ecuaciones/expresiones booleanas equivalentes.
Por ejemplo:

int main(void) {
   int i, a, b, c, r;

<p>a=1; b=2;
   c=a+b; % operador ADD
   c=c*b;</p>

<p>c=c>>1; % operador RSHIFT</p>

<p>r=10;
   for(i=0;i<5;i++) { //... necesito desenrollar el bucle
      r=r+1; //r++;
   }</p>

<p>return 0;
}
```</p>

Fase 1: paso a paso y desenrollar bucles
````
int main(void) {
   int I0, A0, B0, C0, R0;

A0=1; B0=2;
   C0=A0 + B0; % operador ADD
   C1 = C0 * B0;

C2 = C1 >> 1; % operador RSHIFT

R0=10;
   //for(i=0;i<5;i++) { //... necesito desenrollar el bucle
   //   r=r+1; //r++;
   //}
   R1=R0+1;
   R2=R1+1;
   R3=R2+1;
   R4=R3+1;
   R5=R4+1;

return 0;
}
````
Fase 2: "equivalencia binaria"

````
int I0, A0, B0, C0, R0; //supongamos int=8bits en este caso (simplificación)

I = [i7 i6 i5 ... i0]; //registro binario
A = [a7 a6 a5 ... a0];
B = [b7 b6 b5 ... b0];
C = [c7 c6 c5 ... c0];
R = [r7 r6 r5 ... r0];

%A0=1; B0=2;
A0 = [0 0 0 0 0 0 0 1]; //a0=1 
B0 = [0 0 0 0 0 0 1 0]; //b1=1

%C0=A0 + B0; % operador ADD
C0 = binADD(A0,B0); %usar solo función lógica (por ejemplo: múltiples XOR sumadores completos (XOR(XOR(...),...)))

%C1 = C0 * B0;
C1 = binMULTIPLY(C0, B0); %usar solo función lógica

%C2 = C1 >> 1; % operador RSHIFT
=> C2 = SHIFTR(C1,1);
C20 = C11;
C21 = C12;
C22 = C13;
C23 = C14;
C24 = C15;
C25 = C16;
C26 = C17;
C27 = 0;

%R0=10;
%R1=R0+1;
%R2=R1+1;
%R3=R2+1;
%R4=R3+1;
%R5=R4+1;

...

Al final, me gustaría obtener una expresión para una de mis variables.

Por ejemplo, para C:
C = f(A,B) = f(a7, a6, …, a0, b7, b6, …, b0)

Supongamos que a o b podrían ser un valor entre 0 y 255 (a=k1; b=k2;)

He visto mucho software: CMBC, NuSMV, etc. Pero no puedo encontrar cómo exportar las expresiones booleanas equivalentes (por ejemplo, en forma CNF – binaria).

Nota: mi objetivo es convertir esas expresiones en circuitos lógicos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en C, lógica booleana y convertidores, si desea exportar un código C simple en ecuaciones/expresiones booleanas equivalentes, puede seguir estos pasos:

    1. Paso a paso y desenrollar bucles: Primero, vuelva a escribir el código C paso a paso y desenrolle cualquier bucle para simplificar el proceso de conversión. Esto le dará una representación más lineal del código.
    2. Equivalencia binaria: En segundo lugar, represente sus variables en forma binaria y utilice solo funciones lógicas (por ejemplo, AND, OR, XOR, NOT) para definir sus relaciones. Por ejemplo, puede definir la relación entre A y B como C = f(A, B) = f(a7, a6, …, a0, b7, b6, …, b0), donde a y b pueden tomar valores entre 0 y 255.

    3. Expresiones: Por último, puede utilizar software como CMBC, NuSMV u otros para convertir sus ecuaciones/expresiones booleanas en circuitos lógicos.

    Nota: Su objetivo aquí es convertir sus expresiones en circuitos lógicos, por lo que es esencial representar sus variables en forma binaria y utilizar solo funciones lógicas para definir sus relaciones.

Comments are closed.