将两个uint16_t数字相乘得到一个整数

时间:2018-10-08 10:00:18

标签: c++

看看下面的代码片段:

#include <iostream>
#include <cstdint>
#include <boost/type_index.hpp>
using boost::typeindex::type_id_with_cvr;
int main(int argc, char** argv)
{
        constexpr uint16_t b = 2;
        constexpr uint16_t c = 3;
        constexpr const auto bc = b * c;
        std::cout << "b: " << type_id_with_cvr<decltype(b)>().pretty_name() << std::endl;
        std::cout << "b * c: " << type_id_with_cvr<decltype(bc)>().pretty_name()  << std::endl;
}

结果如下:

b: unsigned short const

b * c: int const

为什么将两个不带整数的整数相乘会得到一个整数?

编译器:g ++ 5.4.0

1 个答案:

答案 0 :(得分:2)

unsigned short的值在乘法之前隐式转换为int

shortchar被视为“存储类型”,并在执行计算前隐式转换为int。这就是原因

unsigned char x = 255, y = 1;
printf("%i\n", x+y); // you get 256, not 0