标签: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
标签:style blog http ar color sp for on div
原文地址:http://www.cnblogs.com/Qianqian-Dong/p/4150363.html