a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 62|回复: 0

[C语言] 2012计算机等考二级C语言辅导之赋值运算中的类型转换

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
在赋值运算中,只有在赋值号右侧表达式的类型与左侧变觅类型完全一致时,赋值操作才能进行。如果赋值运算符两侧的数据类型不一致,在赋值前,系统将自动先把右侧表达式求得的数值按赋值号左边变量的类型进行转换,也可以用强制类型转换的方式人为地进行转换后将值赋给赋值号左边的变量。这种转换仅限于数值数据之间,通常称为“赋值兼容”。对于另外一些数据,例如后面将要讨论的地址值就不能斌给一般的变量,称为“赋值不兼容”。
9 ~) I. ]4 n9 ^( I. t6 E  q  在这里,特别需要指出的是在进行混合运算时整型数据类型之间的转换问题。
4 s7 @8 y" Z( B' b  在C语言的表达式(不包括赋值表达式)中,如果运算符两边的整数类型不相同,将进行类型之间的转换。转换规则如下:
9 v, C6 M$ A5 \9 n7 B- X' ~) K" R  (1)若运算符两边一个是短整型,一个是长整型,则将短整型转换为长整型,然后进行运算。& r& \6 }8 z" ^6 {8 A
  (2)若运算符两边一个是有符号整型,一个是无符号整型;则将有符号整型转换成无符号整形,然后进行运算。
3 Y3 t' i2 c3 u  在C语言的赋值表达式中,赋值号右边的值先转换成与赋值号左边的变量相同的类型,然后进行赋值。应当注意:
) z# Z9 T6 w3 T3 U3 r' `  (1)当赋值号左边的变量为短整型,右边的值为长整型时,短整型变量只能接受长整型数低位上两个字节中的数据,高位上两个字节中的数据将丢失。也就是说,右边的值不能超出短整型的数值范围,否则将得不到预期的结果。例如,若有以下定义和语句:$ `1 M4 d7 Y- a, v8 z: f7 ]6 S
  short a;+ d3 ?- }+ l) U( X: ^
  unsigned long b;
' p# ~2 ?3 D1 z% x  b=98304; a=b;
" x* E1 A9 a1 B7 G- F& a( v# z( N' \  printf("%d\n",a);
) j% [6 s$ G/ p4 ~* O  则a中的值为-32768。因为98304(二进制数11000000000000000)已经超出短整型的数值范围(-32768~32767),a截取b中低16位中的值(二进制数1000000000000000),由于最高位为1,因此。中的值为-32768。5 w; D0 U6 a7 D" e) z+ b" I. N
  (2)当赋值号左边的变量为无符号整型,右边的值为有符号整型时,则把内存中的内容原样复制。右边数值的范围不应超出左边变量可以接受的数值范围。同时器要注意,这时负数将转换为正数。例如,变量。被说明为unsigned类型,在进行了a=-1的赋值操作后,将使a中的值为65535。- f* H. A/ {$ I+ _/ e- |/ L; e
  (3)当赋值号左边的变量为有符号整型,右边一的值为无符号整型时,复制的机制同上。这时若符号位为1,将按负数处理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-22 16:51 , Processed in 0.224750 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表