blob: 2c09f3b3498160af2e58d2993d3c221bff8f32a3 [file] [log] [blame]
/*
* 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;
}