fork download
  1. #include <stdio.h>
  2.  
  3. typedef unsigned char uint8;
  4. typedef unsigned short uint16;
  5.  
  6. uint16 Mul8x8(uint8 a, uint8 b)
  7. {
  8. int cnt;
  9. uint16 prod = 0;
  10.  
  11. for (cnt = 8; cnt > 0; cnt--)
  12. {
  13. prod += prod;
  14.  
  15. if (a & 0x80)
  16. prod += b;
  17.  
  18. a += a;
  19. }
  20.  
  21. return prod;
  22. }
  23.  
  24. const uint8 Multipliers[][2] =
  25. {
  26. { 0x00, 0x01 },
  27. { 0x01, 0x00 },
  28. { 0x33, 0x10 },
  29. { 0x11, 0x0C },
  30. { 0x0F, 0x0F },
  31. { 0x80, 0x80 },
  32. { 0xFF, 0xFF },
  33. };
  34.  
  35. int main(void)
  36. {
  37. int i;
  38.  
  39. for (i = 0; i < sizeof(Multipliers) / sizeof(Multipliers[0]); i++)
  40. {
  41. uint8 a = Multipliers[i][0];
  42. uint8 b = Multipliers[i][1];
  43.  
  44. uint16 p = a * b;
  45. uint16 p2 = Mul8x8(a, b);
  46.  
  47. printf("0x%02X * 0x%02X = 0x%04X %c= 0x%04X\n",
  48. a, b, p, "!="[p == p2], p2);
  49. }
  50.  
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 1788KB
stdin
Standard input is empty
stdout
0x00 * 0x01 = 0x0000 == 0x0000
0x01 * 0x00 = 0x0000 == 0x0000
0x33 * 0x10 = 0x0330 == 0x0330
0x11 * 0x0C = 0x00CC == 0x00CC
0x0F * 0x0F = 0x00E1 == 0x00E1
0x80 * 0x80 = 0x4000 == 0x4000
0xFF * 0xFF = 0xFE01 == 0xFE01