C整型升级和寻常算术转换实例(2)
来源:优易学  2011-1-18 12:53:11   【优易学:中国教育考试门户网】   资料下载   IT书店
  整形类规:
  否则,两个操作数都不是三种浮点类型之一,它们一定是某种整值类型。在确定共同的目标提升类型之前,编译器将在所有小于int的整值类型上施加一个被称为整值提升(integral promotion)的过程。在进行整值提升时,类型(char、signed char、unsigned char和short、int)都被提升为类型int。如果机器上的int型足够表示所有unsigned、shoft型的值(这通常发生在short用半个字表示,而int用一个字表示的情况下),则unsigned short int也被转换成int,否则它会被提升为unsigned int。
  wchar_t和枚举类型被提升为能够表示其底层类型(underlying type)所有值的最小整数类型。
  一旦整值提升执行完毕,类型比较就又一次开始。如果一个操作数是unsigned long型,则第二个也被转换成unsigned long型。如果两个操作数的类型都不是unsigned long,而其中一个操作数是long型,则另一个也被转换成long型。long 类型的一般转换有一个例外,如果一个操作数是long型,而另一个是unsigned int型,那么只有机器上的long型足够长,以便能够存放unsigned int的所有值时(一般来说,在32位操作系统中,long型和int 型都用一个字长来表示,所以不满足这里的假设条件),unsigned int才会被转换为long型,否则两个操作数都被提升为unsigned long型。若两个操作数都不是long型,而其中一个是unsigned int型,则另一个也被转换成unsigned int 型。否则两个操作数一定都是int 型。
  int d = -1;
  if (d <= sizeof(arr)/sizeof(arr[0]))
  ...
  这样的比较语句有问题,sizeof运算符返回无符号数。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训