首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

0x100到底是256还是-256?蒙了.(为什么只能给10分 -)解决思路

2012-02-24 
0x100到底是256还是-256?!蒙了...(为什么只能给10分 -,,-)intfoo(intn){nn 24/1 23returnn}intma

0x100到底是256还是-256?!蒙了...(为什么只能给10分 -,,-)
int   foo(int   n)
{
      n=n < <24/1 < <23;
      return   n;
}

int   main()
{
printf( "%d ",f(128));
return   0;
}
vc6.0   结果是-256
gcc结果是256
why??!!编译器的问题??


[解决办法]
嗯,我看错了
不过你的调用也太不专业了
应该是foo(128)才对,弄得我眼花。。。
n=n < <24/1 < <23;
-------------
如果编译器先做的 n < <24 的话128 < <24 = 0x80000000,并且没有声明为无符号整数,那么按照有符号int理解,此时是负数,return的值显然也是负数了
如果编译器有优化,先做了 24/1 < <23,那么相当于128 < < 1,返回的是则是正数
这个结果当然跟机器字长有关,如果你用64位的int运算,肯定没这问题

热点排行