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

Footnotes:

Author: Shi Shougang

Created: 2015-03-05 Thu 23:19

Emacs 24.3.1 (Org mode 8.2.10)

Validate