算术运算符返回类型

6
int main(int argc, char **argv)
{
    unsigned char a = 10, b = 100;
    std::cout<<sizeof(a-b)<<endl;
    return 1;
}

输出结果: 4

返回的数据类型是什么?


4不就是表示100和10所需的位数之差吗,即6和2吗? - DumbCoder
@DumbCoder:我认为如果你把那个发表成一个问题会对你有好处。 - Jacob
1个回答

9

在C++中,算术运算至少使用int精度。 ab都会提升为int类型,并且减法的结果也是int类型。

有一组规则用于确定算术运算所使用的类型;MSDN网站上有一个方便的表格列出了这些规则


它们不是被提升为“unsigned int”吗? - orlp
@Jacob:是的。规则可以在C++语言标准的第5条(“表达式”)开头找到。这些规则与MSDN上描述的规则相同(好吧,MSDN将“long long”添加到列表中,在C++03中不存在但在C++0x中存在)。 - James McNellis
@nightcracker:不,它们被提升为 int 类型。 - James McNellis
1
在那些sizeof(char) == sizeof(int)的平台上(我从未在这样的平台上工作过...),这个计算会将它提升为unsigned int。在16位整数的平台上,unsigned short也会被提升为unsigned int(我也从未在这样的平台上工作过)。 - Johannes Schaub - litb
1
你能指出第5条款的哪个部分吗?上周在讨论中提到过,但我们找不到任何保证将其升级为int的内容。 - Collin Dauphinee
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接