将两个 uint16_t 数字相乘得到一个 int [重复]

Posted

技术标签:

【中文标题】将两个 uint16_t 数字相乘得到一个 int [重复]【英文标题】:Multiplying two uint16_t numbers results in an int [duplicate] 【发布时间】:2018-10-08 10:00:17 【问题描述】:

看看下面的sn-p:

#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】:

unsigned short 值被隐式转换为 int 乘法之前。

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

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

【讨论】:

以上是关于将两个 uint16_t 数字相乘得到一个 int [重复]的主要内容,如果未能解决你的问题,请参考以下文章

动态整数大小:int64_t、int32_t、uint32_t 等

处理代码重新定义 int 类型(uint16_t、int16_t 等)和 Boost 不喜欢它

写入 int vs uint16_t 时的内存填充

c_cpp 将两个浮子挤压成两个uint16_t

gcc中有128位整数吗?

从uint32_t [16]数组到uint32_t变量序列的64位副本