unsigned 与signed
来源:互联网 发布:php直销系统源码下载 编辑:程序博客网 时间:2024/06/13 22:55
#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 了。
- signed 与unsigned 理解
- unsigned 与signed
- signed与unsigned的问题
- signed与unsigned类型相加
- signed与unsigned的问题
- C中signed与unsigned
- C中signed与unsigned
- signed & unsigned.
- signed unsigned
- unsigned signed
- signed & unsigned
- 计算中unsigned与signed的区别
- Signed 与 Unsigned 之间的转换
- 关于unsigned与signed的转换问题
- C语言之unsigned 与signed
- c++需要注意unsigned与signed区别
- C语言 unsigned与signed区别
- c++需要注意unsigned与signed区别
- 线性表
- 在CodeBlocks环境下使用boost库
- 搜寻了关于android推送资料后的一些思考
- Boost库在CodeBlocks环境下的编译
- HashCode和equal方法
- unsigned 与signed
- DNS报文格式(RFC1035)
- samba的安装与基本配置
- onhashchange事件
- 在 Windows 中编译 boost1.42.0
- free命令记
- XML你所要知道的那些规范-RFC
- 写一个线程安全的单例模式
- SVN环境配置(Window/Linux)