C_far

Some macros 16, 8 and 4 bits

Oct 22nd, 2018
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.68 KB | None | 0 0
  1. #pragma compat 1
  2.  
  3. #include <a_samp>
  4.  
  5. #define d16b%0<%1,%2> new %0 = (%2 << 32) | (%1 << 16)
  6. #define a16b(%1,%2) (%2 << 32) | (%1 << 16)
  7. #define g16b(%0,%1) ((%0 >>> (16 << %1)) & 0xFFFF)
  8. #define s16b(%0,%1,%2) %0 = (((0xFFFF0000 >>> (16*_:(!%1))) & %0) | (%2 << (16*_:(!%1))))
  9.  
  10. #define d8b%0<%1,%2,%3,%4> new %0 = (%4 << 24) | (%3 << 16) | (%2 << 8) | (%1)
  11. #define a8b(%1,%2,%3,%4) (%4 << 24) | (%3 << 16) | (%2 << 8) | (%1)
  12. #define g8b(%0,%1) ((%0 >>> (%1 << 3)) & 0xFF)
  13. #define s8b(%0,%1,%2) %0 = (%0 & ~(0xFF << %1 * 8)) | (%2 << %1 * 8)
  14.  
  15. #define d4b%0<%1,%2,%3,%4,%5,%6,%7,%8> new %0 = (%8 << 28) | (%7 << 24) | (%6 << 20) | (%5 << 16) | (%4 << 12) | (%3 << 8) | (%2 << 4) | (%1)
  16. #define a4b(%1,%2,%3,%4,%5,%6,%7,%8) (%8 << 28) | (%7 << 24) | (%6 << 20) | (%5 << 16) | (%4 << 12) | (%3 << 8) | (%2 << 4) | (%1)
  17. #define g4b(%0,%1) ((%0 >>> (%1 << 2)) & 0xF)
  18. #define s4b(%0,%1,%2) %0 = (%0 & ~(0xF << %1 * 4)) | (%2 << %1 * 4)
  19.  
  20. main() {
  21.     {   // 16 bits
  22.         print("-------------------");
  23.         print("----- 16 bits -----");
  24.         print("-------------------");
  25.  
  26.         d16b int<52410, 124>;
  27.  
  28.         printf("int = %032b", int);
  29.         printf("int = %08x", int);
  30.         printf("int = %d", int);
  31.  
  32.         print(" ");
  33.  
  34.         printf("int{0} = %d", g16b(int, 0));
  35.         printf("int{1} = %d", g16b(int, 1));
  36.  
  37.         s16b(int, 0, 1742);
  38.  
  39.         print(" ");
  40.  
  41.         printf("int = 0b%032b", int);
  42.         printf("int = 0x%08x", int);
  43.         printf("int = %d", int);
  44.         printf("int = 0b%032b", a16b(1742, 124));
  45.         printf("int = 0x%08x", a16b(1742, 124));
  46.         printf("int = %d", a16b(1742, 124));
  47.  
  48.         print(" ");
  49.  
  50.         printf("int{0} = %d", g16b(int, 0));
  51.         printf("int{1} = %d", g16b(int, 1));
  52.     }
  53.  
  54.     {   // 8 bits
  55.         print("-------------------");
  56.         print("----- 08 bits -----");
  57.         print("-------------------");
  58.  
  59.         d8b int<152, 255, 5, 42>;
  60.  
  61.         printf("int = 0b%032b", int);
  62.         printf("int = 0x%08x", int);
  63.         printf("int = %d", int);
  64.  
  65.         print(" ");
  66.  
  67.         printf("int{0} = %d", g8b(int, 0));
  68.         printf("int{1} = %d", g8b(int, 1));
  69.         printf("int{2} = %d", g8b(int, 2));
  70.         printf("int{3} = %d", g8b(int, 3));
  71.  
  72.         s8b(int, 2, 233);
  73.  
  74.         print(" ");
  75.  
  76.         printf("int = 0b%032b", int);
  77.         printf("int = 0x%08x", int);
  78.         printf("int = %d", int);
  79.         printf("int = 0b%032b", a8b(152, 255, 233, 42));
  80.         printf("int = 0x%08x", a8b(152, 255, 233, 42));
  81.         printf("int = %d", a8b(152, 255, 233, 42));
  82.  
  83.         print(" ");
  84.  
  85.         printf("int{0} = %d", g8b(int, 0));
  86.         printf("int{1} = %d", g8b(int, 1));
  87.         printf("int{2} = %d", g8b(int, 2));
  88.         printf("int{3} = %d", g8b(int, 3));
  89.     }
  90.  
  91.     {   // 4 bits
  92.         print("-------------------");
  93.         print("----- 04 bits -----");
  94.         print("-------------------");
  95.  
  96.         d4b int<15, 14, 13, 12, 2, 5, 3, 4>;
  97.  
  98.         printf("int = 0b%032b", int);
  99.         printf("int = 0x%08x", int);
  100.         printf("int = %d", int);
  101.  
  102.         print(" ");
  103.  
  104.         printf("int{0} = %d", g4b(int, 0));
  105.         printf("int{1} = %d", g4b(int, 1));
  106.         printf("int{2} = %d", g4b(int, 2));
  107.         printf("int{3} = %d", g4b(int, 3));
  108.         printf("int{3} = %d", g4b(int, 4));
  109.         printf("int{3} = %d", g4b(int, 5));
  110.         printf("int{3} = %d", g4b(int, 6));
  111.         printf("int{3} = %d", g4b(int, 7));
  112.  
  113.         s8b(int, 6, 9);
  114.  
  115.         print(" ");
  116.  
  117.         printf("int = 0b%032b", int);
  118.         printf("int = 0x%08x", int);
  119.         printf("int = %d", int);
  120.         printf("int = 0b%032b", a4b(15, 14, 13, 12, 2, 5, 9, 4));
  121.         printf("int = 0x%08x", a4b(15, 14, 13, 12, 2, 5, 9, 4));
  122.         printf("int = %d", a4b(15, 14, 13, 12, 2, 5, 9, 4));
  123.  
  124.         print(" ");
  125.  
  126.         printf("int{0} = %d", g4b(int, 0));
  127.         printf("int{1} = %d", g4b(int, 1));
  128.         printf("int{2} = %d", g4b(int, 2));
  129.         printf("int{3} = %d", g4b(int, 3));
  130.         printf("int{3} = %d", g4b(int, 4));
  131.         printf("int{3} = %d", g4b(int, 5));
  132.         printf("int{3} = %d", g4b(int, 6));
  133.         printf("int{3} = %d", g4b(int, 7));
  134.     }
  135. }
Advertisement