And16.hdl

// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/And16.hdl

/**
 * 16-bit bitwise And:
 * for i = 0..15: out[i] = (a[i] and b[i])
 */

CHIP And16 {
        IN a[16], b[16];
        OUT out[16];

PARTS:
        Nand(a=a[0],b=b[0],out=x0);
        Not(in=x0,out=out[0]);
        Nand(a=a[1],b=b[1],out=x1);
        Not(in=x1,out=out[1]);
        Nand(a=a[2],b=b[2],out=x2);
        Not(in=x2,out=out[2]);
        Nand(a=a[3],b=b[3],out=x3);
        Not(in=x3,out=out[3]);
        Nand(a=a[4],b=b[4],out=x4);
        Not(in=x4,out=out[4]);
        Nand(a=a[5],b=b[5],out=x5);
        Not(in=x5,out=out[5]]);
        Nand(a=a[6],b=b[6],out=x6);
        Not(in=x6,out=out[6]);
        Nand(a=a[7],b=b[7],out=x7);
        Not(in=x7,out=out[7]);

        Nand(a=a[8],b=b[8],out=x8);
        Not(in=x8,out=out[8]);
        Nand(a=a[9],b=b[9],out=x9);
        Not(in=x1,out=out[9]);
        Nand(a=a[10],b=b[10],out=x10);
        Not(in=x10,out=out[10]);
        Nand(a=a[11],b=b[11],out=x11);
        Not(in=x11,out=out[11]);
        Nand(a=a[12],b=b[12],out=x12);
        Not(in=x12,out=out[12]);
        Nand(a=a[13],b=b[13],out=x13);
        Not(in=x13,out=out[13]]);
        Nand(a=a[14],b=b[14],out=x14);
        Not(in=x14,out=out[14]);
        Nand(a=a[15],b=b[15],out=x15);
        Not(in=x15,out=out[15]);
}