int main ()
{
unsigned char a=200;
unsigned char b=100;
unsigned char c=a+b;
printf("%d,%d",a+b,c);
return 0;
}
今天下午做了北京一个公司的笔试,晚上刚面试回来,聊笔试题时这道题我选了300,44,面试官问我为什么,我的解释如下:
我说unsigned char最大表示的数是255,所以如果赋值256,答案就转为最小值0了,300的话转成44.然后a+b由于是%d,所以输出300.
面试官说不对,想不明白哪里错了,在电脑上跑了下确实输出300 44.
最后要说的是:面试官是个女的.
你说的没有错,她又不指出来,可能面试官太水了。
另外,从位运算的角度给她讲可能会更好些:
从计算机的角度来讲,它是没有以上逻辑的,它可不知道255是最大的,300溢出了,所以应该转为44。这种思考过程只能说是一种比较方便的人脑计算过程。