| /* |
| * Test basic conversions between short signed and unsigned values |
| * with no function calls and no arithmetic. |
| */ |
| #include <stdio.h> |
| |
| unsigned char getUC() { return 0x80; } |
| |
| signed char getSC() { return 0x80; } |
| |
| int main() |
| { |
| signed char SC80 = getSC(); |
| unsigned char UC80 = getUC(); |
| |
| /* source is smaller than dest: both decide */ |
| unsigned short us = (unsigned short) SC80; /* sign-ext then zero-ext */ |
| unsigned short us2 = (unsigned short) UC80; /* zero-ext only: NOP! */ |
| short s = ( short) SC80; /* sign-ext */ |
| short s2 = ( short) UC80; /* zero-extend only : NOP! */ |
| printf("%d %d --> unsigned: us = %d, us2 = %d\n", SC80, UC80, us, us2); |
| printf("%d %d --> signed: s = %d, s2 = %d\n", SC80, UC80, s, s2); |
| |
| /* source is same size or larger than dest: dest decides */ |
| unsigned char uc = (unsigned char ) SC80; /* zero-ext */ |
| unsigned char uc2 = (unsigned char ) UC80; /* NOP */ |
| signed char sc = (signed char ) SC80; /* NOP */ |
| signed char sc2 = (signed char ) UC80; /* sign-extend */ |
| printf("%d %d --> unsigned: uc = %d, uc2 = %d\n", SC80, UC80, uc, uc2); |
| printf("%d %d --> signed: sc = %d, sc2 = %d\n", SC80, UC80, sc, sc2); |
| return 0; |
| } |