读书人

C99中隐式转换?解决方案

发布时间: 2012-09-16 17:33:16 作者: rapoo

C99中隐式转换?
《C语言程序设计 现代方法》

7.4.3 C99中的隐式转换

两个操作数的类型都不是浮点类型的情况:
1.(略)
2.如果无符号操作数的等级高于或等于有符号操作数的等级,将有符号操作数转换为无符号操作数的类型。

3.如果有符号操作数类型可以表示无符号操作数类型的所有值,将无符号操作数转换为有符号操作数的类型。

4.否则,将两个操作数都转为与有符号操作数的类型相对应的无符号类型。

---------------------------------------------------------------

问题:

“ 3.如果有符号操作数类型可以表示无符号操作数类型的所有值,将无符号操作数转换为有符号操作数的类型。”

这句话的意思是:
有符号级别>无符号级别,且无符号整数在有符号整数的范围之内!

C/C++ code
 //实例:  unsigned int x=2147483647;  long  y=3;  x+y;         /*有级别 > 无级别,long y > unsigned int x                       32位计算机:                       有符号整数范围:-2147483647~2147483647                       无符号整数:2147483647                       无符号整数:2147483647,在有符号整数的范围:-2147483647~2147483647之内!                      无-->有,x-->y (x转y) ,对否?                  */ 



[解决办法]
x += y
x = 2147483650

读书人网 >C语言

热点推荐