将两个 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
在乘法之前。
short
和 char
被认为是“存储类型”,并在进行计算之前隐式转换为 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 等