数据类型转换
一、短数据类型扩展为长数据类型
1、要扩展的短数据类型为有符号数
进行符号扩展,即短数据类型的符号位填充到长数据类型的高字节位(即比短数据类型多出的那一部分),保证扩展后的数值大小不变
如1:char x=10001001b; short y=x; 则y的值应为11111111 10001001b;
2:char x=00001001b; short y=x; 则y的值应为00000000 00001001b;
2、要扩展的短数据类型为无符号数
进行零扩展,即用零来填充长数据类型的高字节位
如1:unsigned char x=10001001b; short y=x; 则y的值应为00000000 10001001b;
2:unsigned char x=00001001b; short y=x; 则y的值应为00000000 00001001b;
二、长数据类型缩减为短数据类型
如果长数据类型的高字节全为1或全为0,则会直接截取低字节赋给短数据类型;如果长数据类型的高字节不全为1或不全为0,则转会就会发生错误。
三、同一长度的数据类型中有符号数与无符号数的相互转化
直接将内存中的数据赋给要转化的类型,数值大小则会发生变化。另短类型扩展为长类型时,但短类型与长类型分属有符号数与无符号数时,则先按规则一进行类型的扩展,再按本规则直接将内存中的数值原封不动的赋给对方
| 从 | 到 | 方法 |
| char | short | 符号位扩展 |
| char | long | 符号位扩展 |
| char | unsigned char | 最高位失去符号位意义,变为数据位 |
| char | unsigned short | 符号位扩展到short;然后从short转到 unsigned short |
| char | unsigned long | 符号位扩展到long; 然后从long 转到unsigned long |
| char | float | 符号位扩展到long; 然后从long 转到float |
| char | double | 符号位扩展到long; 然后从long 转到double |
| char | long double | 符号位扩展到long; 然后从long 转到long double |
| short | char | 保留低位字节 |
| short | long | 符号位扩展 |
| short | unsigned char | 保留低位字节 |
| short | unsigned short | 最高位失去符号位意义,变为数据位 |
| short | unsigned long | 符号位扩展到long; 然后从long转到unsigned double |
| short | float | 符号位扩展到long; 然后从long 转到float |
| short | double | 符号位扩展到long; 然后从long 转到double |
| short | long double | 符号位扩展到long; 然后从long 转到double |
| long | char | 保留低位字节 |
| long | short | 保留低位字节 |
| long | unsigned char | 保留低位字节 |
| long | unsigned short | 保留低位字节 |
| long | unsigned long | 最高位失去符号位意义,变为数据位 |
| long | Float | 使用单精度浮点数表示。可能丢失精度。 |
| long | double | 使用双精度浮点数表示。可能丢失精度。 |
| long | long double | 使用双精度浮点数表示。可能丢失精度。 |

浙公网安备 33010602011771号