- 论坛徽章:
- 0
|
本帖最后由 syoubin_sai 于 2010-06-10 16:43 编辑
在64位系统下运行。
有如下代码:- #include <stdio.h>
- #include <stdlib.h>
- #include <assert.h>
- #include <limits.h>
- int main ()
- {
- int last_jobid = INT_MAX;
- printf ("%0x\n", INT_MAX);
- printf ("%0x\n", INT_MAX+1);
- if (last_jobid+1 > (unsigned int)INT_MAX) {
- printf("ok\n");
- }
- return 0;
- }
复制代码 结果为:上面代码中if 语句判断前last_jobid+1 不是要隐式转换成unsigned int吧?
为什么不输出ok呢?- #include <stdio.h>
- #include <stdlib.h>
- #include <assert.h>
- #include <limits.h>
- int main ()
- {
- unsigned int last_jobid = INT_MAX;
- printf ("%0x\n", INT_MAX);
- printf ("%0x\n", INT_MAX+1);
- if (last_jobid+1 > (unsigned int)INT_MAX) {
- printf("ok\n");
- }
- return 0;
- }
- 这个是正确的
复制代码 结果为:- #include <stdio.h>
- #include <stdlib.h>
- #include <assert.h>
- #include <limits.h>
- int main ()
- {
- int last_jobid = INT_MAX;
- printf ("%0x\n", INT_MAX);
- printf ("%0x\n", INT_MAX+1);
- if ((unsigned int)(last_jobid+1) > (unsigned int)INT_MAX) {
- printf("ok\n");
- }
- return 0;
- }
- 这里我自己强制转换了下怎么不对呢?
- 应该输出ok吧?
复制代码 结果为:
|
|