很简单的 数据溢出问题。
随便写了个 如下一个很简单的例子。
#include "stdio.h "
int t(int a, unsigned int b)
{
return a/b;
}
int main()
{
printf( "%d\n ",t(-50,2));
return 0;
}
//输出结果是:2147483623。
原因是unsigned 十无符号的整形不能表示-50/2。所以取低32位的结果就是2147483623
我的问题是:printf( "%x\n ",t(-50,2));//这个不是以16进制输出来结果值吗,结果十7FFFFFE7
printf( "%p\n ",t(-50,2));//这个不是结果值的地址吗,结果为什么也是7FFFFFE7?
我哪里理解错了》结果值等于地址值?
一时反映不上来。各位帮忙理下思路。。。。。
[解决办法]
printf 是函数,对于 t(-50,2)而言,C/C++的处理是:先计算函数值,再把值入栈,传给 printf.
%x 和 %p 都是对同一个值进行格式化,当然都是 7FFFFFE7 了.
[解决办法]
-50用16进制表示为:
80000032
写成无符号形式为:
2147483698
你这个运算结果为:
2147483623
[解决办法]
t(-50,2)是一个函数,所以其返回值一个内存地址。地址是用16进制表示的。所以%x,%p打印出来的内容一样。
[解决办法]