免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7819 | 回复: 21
打印 上一主题 下一主题

无符号字符相加输出结果 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-21 23:30 |只看该作者 |倒序浏览
  1. int main( int argc, char * argv[] )
  2. {
  3.         unsigned char a = 100;
  4.         unsigned char b = 200;
  5.        
  6.         unsigned char c = a + b;

  7.         printf("%d , %d", a+b, c );
  8.        
  9.         return(0);
  10. }
复制代码
这里结果应该是 300,44

我不明白为什么。

论坛徽章:
0
2 [报告]
发表于 2010-10-22 07:27 |只看该作者
第二个a+b赋值给c,c是一个unsigned char超出范围了,256+44=300

论坛徽章:
0
3 [报告]
发表于 2010-10-22 08:16 |只看该作者
unsigned char 范围是0~255.

论坛徽章:
0
4 [报告]
发表于 2010-10-22 08:39 |只看该作者
第二个a+b赋值给c,c是一个unsigned char超出范围了,256+44=300
unsigned char 范围是0~255.


上面说的我明白,我不明白的是为什么输出a+b就不溢出了?

论坛徽章:
0
5 [报告]
发表于 2010-10-22 08:44 |只看该作者
第二个a+b赋值给c,c是一个unsigned char超出范围了,256+44=300
unsigned char 范围是0~255.


上面 ...
qfmeal 发表于 2010-10-22 08:39



    提升成int后传给printf打印了

论坛徽章:
0
6 [报告]
发表于 2010-10-22 08:58 |只看该作者
printf的函数原型:

int printf( const char *format , ... );

是因为 %d 导致类型提升为 int 了吗?

论坛徽章:
0
7 [报告]
发表于 2010-10-22 09:17 |只看该作者
printf的函数原型:

int printf( const char *format , ... );

是因为 %d 导致类型提升为 int 了吗?
qfmeal 发表于 2010-10-22 08:58

不是%d的缘故,是比int长度小的变量进行运算的时候会默认提升到int。

论坛徽章:
0
8 [报告]
发表于 2010-10-22 09:30 |只看该作者
printf的函数原型:

int printf( const char *format , ... );

是因为 %d 导致类型提升为 int 了吗?
qfmeal 发表于 2010-10-22 08:58

不是,printf这样参数不定的函数,小于int的整数都会当成int传给函数,和%d无关,%d只是告诉printf怎么解释传过来这32位数据.

论坛徽章:
0
9 [报告]
发表于 2010-10-22 09:31 |只看该作者
不是%d的缘故,是比int长度小的变量进行运算的时候会默认提升到int。
davelv 发表于 2010-10-22 09:17



    C89之前是这样,之后,像char = char + char这类不会提升了,但int = char + char这样的还是会提升

论坛徽章:
0
10 [报告]
发表于 2010-10-22 09:34 |只看该作者
C89之前是这样,之后,像char = char + char这类不会提升了,但int = char + char这样的还是会提升
liwangli1983 发表于 2010-10-22 09:31

char = char + char这种是提升之后再截断。
无论如何都是会提升的。可能是为了配合int/32位运算而考虑的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP