#include <stdio.h>
#include <stdlib.h>

void myPrint(char *fnName, unsigned int result);
void myPrintSigned(char *fnName, int result);

extern "C" {
  unsigned int unsigned_shift_and(unsigned int val_a, unsigned int val_b);
  unsigned int unsigned_shift_or_not(unsigned int val_a, unsigned int val_b);
  int signed_shift_and_not(int sVal_a, int sVal_b);
  int signed_not_shift_xor(int sVal_a, int sVal_b);
}

void setup() {
  Serial1.begin(9600);
}

void loop() {
  unsigned int val_a = 16;
  unsigned int val_b = 3;
  int sVal_a = -8;
  int sVal_b = 2;

  unsigned int result1 = unsigned_shift_and(val_a, val_b);
  myPrint("unsigned_shift_and()", result1);

  unsigned int result2 = unsigned_shift_or_not(val_a, val_b);
  myPrint("unsigned_shift_or_not()", result2);

  int result3 = signed_shift_and_not(sVal_a, sVal_b);
  myPrintSigned("signed_shift_and_not()", result3);

  int result4 = signed_not_shift_xor(sVal_a, sVal_b);
  myPrintSigned("signed_not_shift_xor()", result4);

  delay(5000); // Delay to observe the results
}

void myPrint(char *fnName, unsigned int result) {
  Serial1.print("The result of ");
  Serial1.print(fnName);
  Serial1.print(" is: ");
  Serial1.println(result, DEC);
}

void myPrintSigned(char *fnName, int result) {
  Serial1.print("The result of ");
  Serial1.print(fnName);
  Serial1.print(" is: ");
  Serial1.println(result, DEC);
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT