Programming Techniques
Table of Contents
Compute Max and Min
#define USHRT_MAX ((u16)(~0U)) #define SHRT_MAX ((s16)(USHRT_MAX>>1)) #define SHRT_MIN ((s16)(-SHRT_MAX - 1)) #define INT_MAX ((int)(~0U>>1)) #define INT_MIN (-INT_MAX - 1)
Two Complement
s16 i = -1; if(i & 1) SHRTMIN = ((s16)(-SHRTMAX - 1))
One Complement
s16 i = -1; if(!(i & 1)) SHRTMIN = ((s16)(-SHRTMAX ))
Duff's device1
do { /* count > 0 assumed */ *to = *from++; /* Note that the 'to' pointer is NOT incremented */ } while(--count > 0); send(to, from, count) register short *to, *from; register count; { register n = (count + 7) / 8; switch(count % 8) { case 0: do { *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *from++; case 3: *to = *from++; case 2: *to = *from++; case 1: *to = *from++; } while(--n > 0); } }
More: http://www.drdobbs.com/a-reusable-duff-device/184406208