unsigned char 问题-问答-阿里云开发者社区-阿里云

开发者社区> a123456678> 正文

unsigned char 问题

2016-06-08 21:09:13 1684 1
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.
最后要说的是:面试官是个女的.

取消 提交回答
全部回答(1)
  • 西秦说云
    2019-07-17 19:32:45

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

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

    无符号数200是  11001000
    无符号数100是  01100100
    按位加结果     00101100   寄存器溢出位置位。
    保存在无符号数中,丢弃溢出位。
    0 0
+关注
0
文章
14879
问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载