C整型升级和寻常算术转换实例(3)
来源:优易学  2011-1-18 12:53:52   【优易学:中国教育考试门户网】   资料下载   IT书店
  if语句在signed int和unsigned int之间测试相等性,按照上面的说法,可以这样解释:
  首先,signed int和unsigned int长度相同,不会向更长的方向转换。
  其次,signed int不能完整地表示unsigned int的所有值。
  因此,signed int d被转换为unsigned int类型。
  这样,-1就变成一个非常巨大的正整数,导致比较结果与预期的不符,解决的方法是使用强制转换,(int)(sizeof(arr)/sizeof(arr[0]))。
  我在VC++ 6.0和DEV-C++ 4.9.9.0中尝试了上面那段代码,的确如此。
  不要因为无符号数不存在负值而用它表示数量(如年龄、国债等),尽量使用int之类的有符号数,这样在混合运算中,这样就不必担心边界情况(如-1被翻译为非常大的正数)。
  只有在使用位段和二进制掩码时,才使用无符号数;应该在表达式中使用强制类型转换,使所有的操作数均为有符号数或无符号数,这样就不必由编译器来选择结果的类型。
  C语言中的类型转换比一般人想象中的要广泛得多,在涉及类型小于int或double的表达式中,都有可能出现类型转换。
  printf(" %d ", sizeof ’A’);
  的结果是4, 是int的长度,编译器首先将’A’升级为整数97,再调用sizeof。

责任编辑:小草

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