gpt4 book ai didi

c++ - 添加两个字符时为什么没有整数溢出?

转载 作者:IT老高 更新时间:2023-10-28 22:36:55 27 4
gpt4 key购买 nike

Possible Duplicate:
Addition of two chars produces int

给定以下 C++ 代码:

unsigned char a = 200;
unsigned char b = 100;

unsigned char c = (a + b) / 2;

逻辑上预期的输出是 150,但是表达式 (a + b) 中不应该有整数溢出吗?

显然必须有一个整数提升来处理这里的溢出,或者发生了我看不到的其他事情。我想知道是否有人可以启发我,这样我就可以知道在整数提升和溢出方面我可以和不应该依赖什么。

最佳答案

C++ 和 C 都不使用像 charshort 这样的“较小”整数类型执行算术计算。在任何进一步的计算开始之前,这些类型几乎总是被提升为 int。所以,你的表达式真的被评估为

unsigned char c = ((int) a + (int) b) / 2;

附:在某些 int 的范围不涵盖 unsigned char 范围的奇异平台上,类型 unsigned int 将用作目标类型推广。

关于c++ - 添加两个字符时为什么没有整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com