当前位置: 首页 > 知识库问答 >
问题:

将两个uint16\u t数字相乘得到一个int[重复]

李良策
2023-03-14

看看以下片段:

#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*c:int-const

为什么将两个非单精度整数相乘会得到一个整数?

编译器:g 5.4.0


共有1个答案

楚涵润
2023-03-14

无符号short值在乘法之前隐式转换为int。

short和char被视为“存储类型”,并在进行计算之前隐式转换为int。这就是为什么

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

 类似资料:
  • 有人请解释一下。为什么下面的程序产生16个?

  • 我有一个PySpark数据帧,df1,看起来像: 我有第二个PySpark数据帧,df2 我想将df1的所有列(我有两列以上)与客户ID上的df2连接值相乘

  • 我正在尝试将两个EditText相乘,两个editthours和editWage并在TextView(gross)中显示结果。非常感谢任何帮助 该应用程序崩溃于 logcat

  • 该方法通过用户的输入获取给定数据集中的两个最大整数,并计算它们的乘积。它对每个输入都很有效,直到我尝试了两个整数和的数组,它返回。 这是我的Java方法: 这是我的方法:

  • 问题内容: 我目前正在编写一个小的下载管理器,尝试以百分比计算下载进度时会得到一个有趣的输出。这是我用来计算的: 是一个int(它计算从中读取的总字节数),并且是下载文件的长度(以字节为单位)。 只需少量下载即可很好地工作。但是,当我使用较大的文件(40MB)时,它开始制作有趣的东西。计算的输出如下所示: 我不知道为什么,但是计算结果为负。 由于正常的整数应该可以包含2 31 -1的数字,因此这不

  • 如果一个表达式包含任何整数大小或更小的内容,其结果总是整数,即使两个字节之和适合一个字节。 为什么我们在一个字节中添加最后两个字节时会发生这种情况?没有编译器错误。