类型转换的规则:
1.默认由窄的数据类型转换成宽的数据类型
2.同级别的无符号类型比有符号类型宽
3.不同类型运算时,从整形起
4.窄边宽时,左边补符号位
类型转换分两类:
显式转换:告诉转换的类型(强转)
隐式转换:没有明确告诉转换的类型
类型转换的相关例题:
解析:
1.char a =-1
2.char类型数据的取值范围为-128~127,数字呈环状,首尾相接,所以b 255就等于-1
3.unsigned char c = a,将a转换成unsigned char型,a:11111111,unsigned char型计算得255
4.b=-1,将b转换成无符号char型,b:11111111,unsigned char型计算得255
5.a:11111111,转换成int型,前面补符号位1,所以e:11111111111111111111111111111111,为-1
6.b:11111111,转换成int型,前面补符号位1,所以f:11111111111111111111111111111111,为-1
7.a:11111111,转换成unsigned int型,前面补符号位1,所以g:11111111111111111111111111111111,因为g是无符号类型,所以计算得 2^32-1,等比数列的前n项和+1
8.b:11111111,转换成unsigned int型,前面补符号位1,所以h:11111111111111111111111111111111,因为h是无符号类型,所以计算得 2^32-1,等比数列的前n项和+1
解析:
1.因为char类型数据的取值范围为-128~127,所以b1=200-256=-56
2.因为unsigned char类型数据的取值范围为0~256,所以c1=200
3.int m1 = b1,将b1char型转换成int型,b1:11001000,前面补符号位1,m1:11111111111111111111111111001000计算得-56
4.int m1 = c1,将c1 unsigned char型转换成int型,c1:11001000,前面补符号位0,n1:00000000000000000000000011001000计算得200
解析:
1.d1=200
2.d1为int型,强转成char型,即保留低地址8位,e1:11001000计算得-56
3.d1 = e1,char类型转换成int型,e1:11001000,前面补符号位1,d1:11111111111111111111111111001000计算得-56
解析:
1.char i = (char) 200,强转,显式转换,因为char类型范围为-128~127,所以i=200-256=-56
2.int j= (int)12.5,强转,显式转换,j保留整数部分j=12
3.int l= k+25,因为k是char类型,char类型和int型相加存在着隐式转换,将k转换成int型,k转换成int型等于100,即l=100+25=125
解析:
1.if(m>-1),因为m是unsigned short类型,数字默认是int型,所以m要转换成int型,前面补符号位,m:00000000000000000000000000001010计算得10所以输出“m>-1”
2.if(n>-1),因为-1是int型,n是unsigned int型,-1转换成unsigned int型,前面补符号位1,即11111111111111111111111111111111计算得
2^32-1,所以输出“n<=-1”