您的位置:首页 > 其它

unsigned 与signed

2013-05-25 21:15 162 查看
#include <stdio.h>

#include <string.h>

int main()

{

int x = 2;

char * str = "abcd";

int y = (x - strlen(str) ) / 2;

printf("%d\n",y);

}

结果应该是 -1 但是却得到:2147483647 。为什么?因为strlen的返回值,类型是size_t,也就是unsigned int ,与 int 混合计算时类型被自动转换了,结果自然出乎意料。。。

观察编译后的代码,除法指令为 div ,意味无符号除法。

解决办法就是强制转换,变成 int y = (int)(x - strlen(str) ) / 2; 强制向有符号方向转换(编译器默认正好相反),这样一来,除法指令编译成 idiv 了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: