unsigned char 问题

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.
最后要说的是:面试官是个女的.

阅读 5k
1 个回答

你说的没有错,她又不指出来,可能面试官太水了。

我说unsigned char最大表示的数是255,所以如果赋值256,答案就转为最小值0了,300的话转成44 。

另外,从位运算的角度给她讲可能会更好些:
从计算机的角度来讲,它是没有以上逻辑的,它可不知道255是最大的,300溢出了,所以应该转为44。这种思考过程只能说是一种比较方便的人脑计算过程。

无符号数200是  11001000
无符号数100是  01100100
按位加结果     00101100   寄存器溢出位置位。
保存在无符号数中,丢弃溢出位。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏