首页 百科知识 c语言整型变量怎么赋值

c语言整型变量怎么赋值

时间:2022-10-17 百科知识 版权反馈
【摘要】:现在要解决的问题是:表达式计算完以后要赋值给一个变量,如何进行数据类型的转换。如果赋值运算符两侧的数据类型不一致,则需要将赋值运算符右边的值的类型转换得与左边变量的类型一致。但应注意数值范围不能溢出。这时有两种情况:①如果所用系统将字符处理为无符号的量或对unsigned int型变量赋值,则将字符的8位放到整型变量的低8位,高8位补零。

2.5.3 赋值运算中的类型转换

前面讨论的自动类型转换和强制类型转换都是针对表达式的,根据自动类型转换和强制类型转换的规则,我们可以知道一个表达式计算以后的数据类型。现在要解决的问题是:表达式计算完以后要赋值给一个变量,如何进行数据类型的转换。

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

如果赋值运算符两侧的数据类型不一致,则需要将赋值运算符右边的值的类型转换得与左边变量的类型一致。具体转换情况如下:

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

(1)将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点型数的小数部分。例如j为整型变量,执行“j=20.78”的结果是使j的值为20,在内存中以整数形式存储。

(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。

img131

图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”(其ASCII码为56)。

img132

图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。

img133

图2.5.4

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

img134

图2.5.5

例2-4 有符号数据传送给无符号变量。

img135

“%u”是输出无符号数时所用的格式符。运行结果为:

65535

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

以上的赋值规则看起来比较复杂,其实,不同类型的整型数据间的赋值归根结底就是一条:按存储单元中的存储形式直接传送。

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

我要反馈