简单而又想不通的编程问题,我的256去哪里了?

ask4vc 2010-02-26 07:56:40
我的程序是:
char c=1,d=174;
//430
printf("c=%d\n",c<<8);
unsigned int t = (c<<8)+d;
printf("%07d\n",t);
显示的结果为:
c=256
0000174
为什么第二行的结果少了256?
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
验证码识别 2010-03-06
  • 打赏
  • 举报
回复
up



up
会飞的老鱼 2010-02-27
  • 打赏
  • 举报
回复
楼上都是正解,每天回贴,加10分可用分。。。。
密斯刘 2010-02-26
  • 打赏
  • 举报
回复
在计算机中数是以补码的形式存放的,char默认为signed char,即有符号型,范围是-128-127.正整数174(没有范围约束)的补码是10101110,当将他的范围约束到-128-127的时候,也即赋值给char的时候,补码10101110表示的是-82(将10101110按位取反得到01010001,然后加1,得到01010010.而01010010代表十进制数82.因为补码10101110的第一位是1,表示复数,所以为-82)。
然后256+(-82)= 0000174。

你需要弄懂原码、反码、补码的知识。
ostrichll 2010-02-26
  • 打赏
  • 举报
回复
char d=174
默认是有符号的,也就是-82,256-82=172正正好

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧