#include <iostream>
using namespace std;
int main()
{
int a;
long b;
cout<<sizeof(a+b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出为 8(长变量的大小)。为什么它不返回它们的总和?
Ard*_*der 16
输出为 8(长变量的大小)
因为整数提升。
所有有符号整数类型的等级都是不同的,并且随着它们的精度增加:有符号字符的等级<短的等级<整数的等级<长整数的等级<长长整数的等级
因此,a + b产生一个long因为a是int和b是long(long 的等级大于 int)。
所以,你有sizeof(long)which 是8。
为什么它不返回他们的添加
您可能正在寻找 sizeof(a) + sizeof(b);
sizeof 运算符返回 a(type)或 的字节大小expression。
a + b是一个表达式并在隐式转换后被a提升,long这就是结果8在您的机器上的原因,即long.
要计算多个类型和/或表达式的总大小,请分别计算它们并像这样使用加法:
auto total = sizeof(a) + sizeof(b) + sizeof(c+d);
Run Code Online (Sandbox Code Playgroud)
因为算术运算的结果类型与操作数的类型相同(转换后1),并且类型相同,大小也相同。加法不是字节连接操作,不会导致两个操作数的字节在内存中并排。没有理由期望结果类型具有操作数大小的总大小。
考虑一个在循环中添加整数的程序。如果将 10 亿个整数加在一起,您会期望结果有几 GB 大小吗?
1具体来说,首先将操作数转换为普通类型;混合类型上没有算术运算。简而言之,通用类型是两者中较大的一个,在本例中,long它在您的系统上的大小恰好是 8(在此之前,如果涉及较小的操作数,则会升级为 int)。
| 归档时间: |
|
| 查看次数: |
646 次 |
| 最近记录: |