开发者社区> 问答> 正文

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

展开
收起
a123456678 2016-06-08 21:09:13 2447 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista

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

    我说unsigned char最大表示的数是255,所以如果赋值256,答案就转为最小值0了,300的话转成44 。
    另外,从位运算的角度给她讲可能会更好些:
    从计算机的角度来讲,它是没有以上逻辑的,它可不知道255是最大的,300溢出了,所以应该转为44。这种思考过程只能说是一种比较方便的人脑计算过程。

    无符号数200是  11001000
    无符号数100是  01100100
    按位加结果     00101100   寄存器溢出位置位。
    保存在无符号数中,丢弃溢出位。
    2019-07-17 19:32:45
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载