C/C++ 中两个字符相乘的结果是什么类型?
unsigned char a = 70;
unsigned char b = 58;
cout << a*b << endl; // prints 4060, means no overflow
cout << (unsigned int)(unsigned char)(a*b) << endl; // prints 220, means overflow
我期望两个 T 类型的数字(例如 char、short、int)相乘的结果变成 T。看起来是int
for char
因为sizeof(a*b)
is 4.
我编写了一个简单的函数来检查乘法结果的大小:
template<class T>
void print_sizeof_mult(){
T a;
T b;
cout << sizeof(a*b) << endl;
}
print_sizeof_mult<char>()
, print_sizeof_mult<short>()
, and print_sizeof_mult<int>()
是 4 和print_sizeof_mult<long>()
is 8.
这些结果仅适用于我的特定编译器和机器架构吗?或者是否在某处记录了 C/C++ 中基本操作的输出是什么类型?
根据 C++ 标准 (4.5积分促销)
1 除 bool、char16_t、char32_t 或之外的整数类型的纯右值
wchar_t 的整数转换等级 (4.13) 小于
如果 int 可以表示所有,则 int 可以转换为 int 类型的纯右值
源类型的值;否则,源右值可以是
转换为 unsigned int 类型的纯右值。
和(5 个表达式)
10 许多二元运算符期望算术或操作数
枚举类型导致转换并以类似的方式产生结果类型
方式。目的是产生一个通用类型,这也是
结果。这种模式称为通常的算术转换,
其定义如下:
....
- 否则,积分促销(4.5)应在两者上进行
操作数.61 那么以下规则应适用于升级的
操作数:
最后(5.6 乘法运算符)
2 * 和 / 的操作数应为算术或无作用域
枚举类型; % 的操作数应具有整数或无作用域
枚举类型。通常的算术转换是在
操作数并确定结果的类型。
Types char
and short
转化排名低于该类型的排名int
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)