You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中两个unsigned short相除结果为何是int类型?

为什么两个unsigned short类型变量做除法后结果是int?

先看你提供的测试代码,运行后确实会输出代表int类型的标识:

// Example program
#include <iostream>
#include <string>
#include <typeinfo>

int main(){
    unsigned short a = 1;
    unsigned short b = 1;
    auto c = a/b;
    std::cout<<"result of dividing unsigned shorts is: "<<typeid(c).name()<<std::endl;
}

出现这个结果的核心原因是C++的整数提升(integer promotion)机制。

当你对两个「小于int的整数类型」(比如unsigned short、short、char这类)执行算术运算时,编译器会自动把它们提升到int类型(特殊情况是如果原类型的所有取值范围没法被int容纳,才会提升到unsigned int,但在绝大多数现代系统里,unsigned short的取值范围是065535,而int的范围至少是-21474836482147483647,完全能装下unsigned short的所有值,所以会直接提升到int)。

具体到你的代码里,a/b这个除法运算执行前,变量a和b都会被先转换成int类型,整个表达式的结果自然就是int了,所以auto推导出来的c的类型就是int。

这种提升规则是C++标准里「常规算术转换」的一部分,目的是避免小整数类型运算时容易出现的溢出问题,同时统一运算的类型,让编译器处理起来更高效。

内容的提问来源于stack exchange,提问作者UweJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:47:50