为什么两个答案不一样?

img


a和b都是signed char,为什么%d形式输出a+b就不整形提升了?

【相关推荐】



  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7613288
  • 这篇博客也不错, 你可以看下为什么我的交换函数不起作用?
  • 您还可以看一下 唐世林老师的秒杀商品实现详解课程中的 秒杀怎么限流?小节, 巩固相关知识点
  • 除此之外, 这篇博客: 为什么析构函数中不能抛出异常?中的 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。

    2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

因为c本来就是char类型的。将a+b的值赋给c的时候,我们是按左边的类型来看,也就是按c的类型来看的。所以c就是127+3=-126(越界转换)。所以c直接用百分之d输出的时候还是负的126,因为并没有越界。但直接把a+b以%d的形式输出的话,因为a+b的值是130,超过了2的7次方减一(越界)。所以计算机会先进行一个隐式类型转换,然后再输出。