首页 百科知识 浮点数赋值给整型变量

浮点数赋值给整型变量

时间:2024-10-16 百科知识 版权反馈
【摘要】:如果赋值运算符两侧的数据类型不一致,需要将赋值运算符右边的表达式的类型转换为左边变量的类型。但应注意数值范围不能溢出。有两种情况:①如果所用系统将字符处理为无符号的量或对unsigned int型变量赋值,则将字符的8位放到整型变量的低8位,高8位补零。这称为“符号扩展”,这样做的目的是使数值保持不变,如变量a以整数形式输出为19,x的值也是19。例如:如果j=65530,则赋值后i值为6。

2.5.3 赋值运算中的类型转换

对于赋值表达式,也可能存在数据类型转换。

如果赋值运算符两侧的数据类型一致,不需要进行数据类型的转换。

如果赋值运算符两侧的数据类型不一致,需要将赋值运算符右边的表达式的类型转换为左边变量的类型(当然,是值之间的转换)。具体转换情况为

1.整型数与浮点型数间的转换

1)将浮点型数据(包括单、双精度)赋予整型变量时,舍弃浮点型数的小数部分。

2)将整型数据赋予浮点型(单、双精度)变量时,数值不变,但以浮点型数形式存储到变量中。

2.浮点型数间的转换

1)将一个double型数据赋予float变量时,截取其前7位有效数字,存放到float变量的存储单元(32位)中。但应注意数值范围不能溢出。例如:

  float y;

  double x=234.5634589e100;

  y=x;

就会出现溢出错误。

2)将一个float型数据赋予double变量时,数值不变,有效位数扩展到16位,在内存单元中以64位(bit)存储。

3.整型数与字符型数间的转换

1)将字符型数据赋予整型变量时,由于字符型数据只占1个字节,而整型变量占2个字节(在Turbo C2.0环境下),因此将字符型数据(8位)放到整型变量的低8位中。有两种情况:

①如果所用系统将字符处理为无符号的量或对unsigned int型变量赋值,则将字符的8位放到整型变量的低8位,高8位补零。例如:将字符'\355'赋予int型变量x,如图2.5.2 (a)所示。

②如果所用系统(如Turbo C)将字符处理为带符号的量(即signed char),若字符最高位为0,则整型变量高8位补0;若字符最高位为1,则高8位全补1(如图2.5.2(b)所示)。这称为“符号扩展”,这样做的目的是使数值保持不变,如变量a(字符'\355')以整数形式输出为−19,x的值也是−19。

图2.5.2 字符型数转换为整型数

2)将一个int、short、long型数据赋予一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)中即可。例如:

  int i=568;

  char j='c';

  j=i;

赋值情况见图2.5.3。赋值后j的值为56,如果用“%c”输出,将得到字符‘8’。

img79

图2.5.3 整型数转换为字符型数

4.整型数间的转换

1)将带符号的整型数据(int 型)赋予long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中,如果int 型数据为正值(符号位为0),则long型变量的高16位补0;如果int 型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。

2)若将一个long型数据赋予一个int 型变量,只将long型数据中低16位原封不动地送到int 型变量(即截断)。例如:

  int i;

  long j=255;

  i=j;

赋值情况见图2.5.4。

img80

图2.5.4 long型数255转换为整数

如果j=65530(八进制数0177772),则赋值后i值为−6。见图2.5.5。如果j=0177772(八进制数),赋值后i也为−6。请读者自己分析。

img81

图2.5.5 long型数65530转换为整数

例2-4 有符号数据赋予无符号变量。

img82

其中,%u是输出无符号数时所用的格式符。运行结果为:65535

如果j为正值,且在0~32 767之间,则赋值后数值不变。

不同类型的整型数据间的赋值归根结底就是:按存储单元中的存储形式直接传送。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈