数据类型转换的特殊情形
1、程序:
#include<stdio.h>
void main()
{
/*第一种情形,数据溢出*/
unsigned short a = 256;
char b = a;
printf("%d",b);//输出结果为0,因为b只是取得了a值的低8位
/*第二种情形,当把占字节较小的数据赋值给占字节较大的数据时,当字节较小数的符号位为0时,转换时新扩充的位被填充成0*/
char c =10;
unsigned short d = c;
printf("\n%p", &d);//变量h输出地址
printf("\n%u",d);//变量d输出的值是10
/*第三种情形,当把占字节较小的数据赋值给占字节较大的数据时,当字节小数的符号位为1时,转换时新扩充的位被填充成1*/
char e = 255; //二进制数为1111 1111
short f =e; //变量f的二进制数为1111 1111 1111 1111
printf("\n%p",&f);//变量f输出地址
printf("\n%d",f);//变量f输出的值是-1
char g =128; //二进制数为1000 0000
short h = g; //变量h的二进制数为1111 1111 1000 0000
printf("\n%p", &h);//变量h输出地址
printf("\n%d", h);//变量h输出的值是-128
char i = 10; //二进制数为0000 1010
short j = i; //变量j的二进制数为0000 0000 0000 1010
printf("\n%p", &j);//变量j输出地址
printf("\n%d",j);//变量j输出的值是10
getchar();
}
2、运行结果: