首页 > 代码库 > C++:For循环的无符号条件判断问题
C++:For循环的无符号条件判断问题
有个奇怪的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循环的无符号条件判断问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。