Handle two\'s complement numbers.
SignExtend.cpp@0:b495118be5a7, 2011-01-20 (annotated)
- Committer:
- Owen
- Date:
- Thu Jan 20 20:01:36 2011 +0000
- Revision:
- 0:b495118be5a7
Who changed what in which revision?
User | Revision | Line number | New 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 | } |