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.
最后要说的是:面试官是个女的.
你说的没有错,她又不指出来,可能面试官太水了。
我说unsigned char最大表示的数是255,所以如果赋值256,答案就转为最小值0了,300的话转成44 。
另外,从位运算的角度给她讲可能会更好些:
从计算机的角度来讲,它是没有以上逻辑的,它可不知道255是最大的,300溢出了,所以应该转为44。这种思考过程只能说是一种比较方便的人脑计算过程。
无符号数200是 11001000
无符号数100是 01100100
按位加结果 00101100 寄存器溢出位置位。
保存在无符号数中,丢弃溢出位。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。