Handle two\'s complement numbers.

Committer:
Owen
Date:
Thu Jan 20 20:01:36 2011 +0000
Revision:
0:b495118be5a7

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Owen 0:b495118be5a7 1 #include "mbed.h"
Owen 0:b495118be5a7 2 #include "assert.h"
Owen 0:b495118be5a7 3
Owen 0:b495118be5a7 4 int SignExtend( int value, const int bit_width )
Owen 0:b495118be5a7 5 {
Owen 0:b495118be5a7 6 assert( ( bit_width > 1) && ( bit_width < (8*sizeof(int)) ) );
Owen 0:b495118be5a7 7
Owen 0:b495118be5a7 8 value &= ( (1<<(bit_width)) - 1 ); /* Clear out any extra MSB data */
Owen 0:b495118be5a7 9
Owen 0:b495118be5a7 10 if ( ( value & ( 1 << (bit_width-1) ) ) != 0 )
Owen 0:b495118be5a7 11 {
Owen 0:b495118be5a7 12 /* value IS negative */
Owen 0:b495118be5a7 13 value -= (1<<bit_width);
Owen 0:b495118be5a7 14 }
Owen 0:b495118be5a7 15
Owen 0:b495118be5a7 16 return value;
Owen 0:b495118be5a7 17 }