码迷,mamicode.com
首页 > 编程语言 > 详细

C++:For循环的无符号条件判断问题

时间:2014-12-08 10:29:39      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   sp   for   on   div   

有个奇怪的C语言问题:
 

unsigned char t=0;
  unsigned char i=0;
  for(i=0; i <(t -1); i++)
  
{
      
printf("i=%u\n",i);
      if(i > 
100)
      break;
  
}

 

 

这样循环一次也不执行,但是若把代码中的char都改成int,就会循环很多次.
因为若t为unsigned
char(u8)时,1为int型,t-1会都转换成int类型的运算,为-1.i为u8类型,与int比较时候会转换成int,因此0<-1,循环不会执行.

若t为unsigned
int(u32)时,1为int型,t-1会都转换成u32类型的运算,为一个很大的值.i也是u32类型,因此0<4294967295,循环会执行非常多次.

后来在C++
primer书上找到关于类型转换的:
最简单的转换为整型提升:对于所有比int型小的整型,包括char,signed char,unsigned
char,short和unsigned short,如果该类型的所有可能的值都能包括在int内,它们会被提升为int型,否则它们将被提升为unsigned
int型.如果将bool值提升为int,则false转换为0,而true则转换为1.
对于包含signed和unsigned
int型的表达式,其转换可能出乎我们的意料.表达式中的signed型数值会被转换为unsigned型.

转载自:http://blog.sina.com.cn/s/blog_4a24ee3e01016m8a.html

 

C++:For循环的无符号条件判断问题

标签:style   blog   http   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/Qianqian-Dong/p/4150363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!