对无符号整形数的操作

strlen返回一个类型为size_t的值,这个类型在头文件stddef.h中定义,他是一个无符号整数类型。在表达式中操作无符号书可能导致不可预料的结果

if ( strlen(x) >= strlen(y) ...

if ( strlen(x) - strlen(y) >= 0) ...

第一条语句可以按照你的想法去工作,但第2条语句将永远是真,strlen 的结果是无符号书,所以 >= 左边的表达式也将是无符号数,而无符号数 觉不可能使负的。

 

 unsigned int a, b, c;
 a = 3;
 b = 4;
 c = a - b;
 printf("%ud",c);

输出 c 为 4294967295.

posted on 2013-03-06 09:13  tracymdy  阅读(158)  评论(0编辑  收藏  举报