Ich hab hier auch mal wieder paar Sachen 
SWAP
Als erstes die gute alte SWAP Funktion ohne Variablen (ich weiß ist schon alt, habe ich hier aber noch nicht gesehen):
#define SWAP(%0,%1) (((%0)^=(%1)),((%1)^=(%0)),((%0)^=(%1)))
new a=5,b=10;
SWAP(a,b);
printf("a: %d | b: %d",a,b); //->Output: a: 10 | b: 5
TotalBits
Als nächstes eine sehr nützliche Funktion, wenn man die Anzahl an 1nser Bits in einer Zahl bestimmen will:
Beispiele:
1. 0xF = 15 = 0b1111 //Wir sehen hier 4x die 1
2. 0xA = 10 = 0b1010 //Hier sehen wir 2x die 1
Ich denke jedem ist klar, was ich meine um dies zu ermitteln, ohne Schleife, kann man Bit-Shifting verwenden:
#include <a_samp>
main() {
printf("%d",GetTotalBits(0xF)); //-> 4
printf("%d",GetTotalBits(10)); //-> 2
}
stock GetTotalBits(v) {
v -= ((v >> 1) & 0x55555555),v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
return (((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 0x18);
}
Kleiner bzw Größer
Wenn man 2 Variablen hat, x = 13 und y = 14 und prüfen will welche kleiner bzw größer ist, kann man das so machen:
#define min(%0,%1) (((%0)<(%1))?(%0):(%1))
#define max(%0,%1) (((%0)>(%1))?(%0):(%1))
new x = 13, y = 14;
new r = min(x,y); //r = 13
new z = max(x,y); //z = 14
/*
Man könnte das auch durch Bit-Shifting lösen (da das der Titel ist :D):
new x = 13, y = 14;
new r = y ^ ((x ^ y) & -(x < y)); //Das gibt das minimum zurück (13)
new z = x ^ ((x ^ y) & -(x < y)); //Das gibt das maximum zurück (14)
Allerdings ist diese Variante wesentlich langsamer, als der ternary Operator :)
*/
Viel Spaß damit 
mfg. 