无符号字符数x转换为带符号字符数时,当时,转换后仍然为x;当
时,转换后变为
。
带符号字符数y转换为无符号字符数时,当时,转换后变为
;当
时,转换后仍然为y。
无符号整数和带符号整数的相互转换,实质上就是类型的强制转换。
源程序
void utosfun( unsigned char u[], char *pt1 );
void stoufun( char s[],unsigned char *pt2 );
void main()
{
unsigned char ux[2]={9,129},syu[2],fsyu[2];
char sy[2]={2,-2},uxs[2],fuxs[2];
int i;
utosfun(ux,uxs);
stoufun(sy,syu);
for(i=0;i<2;i++)
fsyu[i]=(unsigned char)sy[i]; //强制类型转换
for(i=0;i<2;i++)
fuxs[i]=(char)ux[i]; //强制类型转换
while(1);
}
/**无符号数转换为带符号数**/
void utosfun( unsigned char u[], char *pt1 )
{
int j,n=2;
for(j=0;j<2;j++)
{
if(u[j]<(n<<7))
pt1[j]=u[j];
else
pt1[j]=u[j]-(n<<8);
}
}
/**带符号数转换为无符号数**/
void stoufun(char s[], unsigned char *pt2)
{
int k,n=2;
for(k=0;k<2;k++)
{
if(s[k]<0)
pt2[k]=s[k]+(n<<8);
else
pt2[k]=s[k];
}
}
程序运行后:
带符号字符数组sy[]元素转换为无符号字符数后存放在数组syu[]中;数组sy[]元素强制转换为无符号字符数后存放在数组fsyu[]中。syu[]与fsyu[]元素相同。
无符号字符数组ux[]元素转换为带符号字符数后存放在数组uxs[]中;数组ux[]元素强制转换为带符号字符数后存放在数组fuxs[]中。uxs[]和fuxs[]元素相同。