类型转换:1、显式转换 2、隐式转换
int a=(int)12.5;(显式转换) int a='a'+1-12.5*2;(隐式转换)
1、窄的数据类型变宽的数据类型
2、同类型的无符号比有符号宽(不同类型比较要转成相同类型的)
3、整型起(整型是运算的起点)
4、最终的数据类型以赋值符号左边为准
int main()
{
//char a = 'a'+'b';
char a = -1; //-1
char b = 255;//-1
unsigned char c = -1;//255
unsigned char d = 255;//255
int e = a;//-1
int f = b;//-1
int g = c;//255
int h = d;//255
unsigned int i = a;//
unsigned int j = b;//
unsigned int k = c;//255
unsigned int x = d;//255
printf("%d,%d,%d,%d\n",e,f,g,h);
printf("%u,%u,%u,%u\n",i,j,k,x);
return 0;
}
数据类型转换的本质原因
1、窄变宽:左边补符号位(有符号位)没有符号位补0 右边补0
int main()
{
char a = -1; //1111 1111
char b = 1; //0000 0001
unsigned char c = 1; //0000 0001
unsigned char d = 255; //1111 1111
int e = a;//-1 11111111 11111111 11111111 11111111(有符号位补符号位1)
printf("%d,%x\n",e,e);
e = b;//1 00000000 00000000 00000000 00000001
printf("%d,%x\n",e,e);
e = c;//1 00000000 00000000 00000000 00000001
printf("%d,%x\n",e,e);
e = d;//255 00000000 00000000 00000000 11111111(无符号位补0)
printf("%d,%x\n",e,e);
return 0;
}
2、宽变窄:保留低数据
int main()
{
int a = 0x12345678;
int b = 0xff347890;
char c = a;//0x78 保留一个字节
char d = b;//0x90 1001 0000 有符号位,取反加一 0111 0000 -112
printf("%d,%x\n",c,c);
printf("%d,%x\n",d,d);
return 0;
}