从我从得到的回答这个问题,看来C++继承了这一要求,对于转换short成int从C.执行算术运算时,我可以挑你的大脑,以为什么这是用C首先介绍?为什么不做这些操作short呢?
例如(取自评论中的dyp建议):
short s = 1, t = 2 ;
auto x = s + t ;
Run Code Online (Sandbox Code Playgroud)
x将具有int类型.
相关: 这对int64_t的处理是GCC和Clang的错误吗?
我能想到的唯一解决方案是将其中一个操作数显式转换为int64,至少也要强制产品int64.
但是如果以这种方式完成,则由编译器的智能实际做到int64*int32,或者int64*int64,或者理想情况下,将其优化回来int32*int32.
如在相关问题讨论,分配的结果int32*int32,以int64不改变的事实int32*int32已经引起UB.
任何想法?
我从阅读转换int到long long int正在促销,因此认为不应该有任何问题,因为没有数据丢失,不像反之亦然转换.
但是当我将两个int大的值相乘并存储它时long long int,它会显示负数.
例如:
int a=1000000, b=1000000;
long long int c=a*b;
cout<<c;
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我一个负值.有人可以解释原因吗?
我正在尝试执行一个简单的长乘法,但没有显示正确的输出。这是示例代码
'''
#include<iostream>
using namespace std;
int main ()
{
long long int c=100000*90000;
cout<<c;
return 0;
}
'''
Run Code Online (Sandbox Code Playgroud)
变量 c 的 cout 是:410065408
我不知道为什么它显示垃圾值而不是 9000000000。
我试图了解数字如何存储在计算机内存中的基本知识.因此我最近选择了C++.我编写了以下函数来计算任何int值的平方.
// since integer can go upto 65K value, hence the return
// value is double to accomodate the square of highest int value.
double square(int val) {
return val*val;
}
Run Code Online (Sandbox Code Playgroud)
为什么它给我一个错误的答案65535,根据我的理解,这是可以存储在类型变量中的最大数字int?我也发现有类似的东西:
std::numeric_limits<int>::max()
这给了我2147483647.这反过来让我更加困惑,但我正在寻找解释为什么我的square功能失败的原因.
编辑
因为65535我的g++编译器给了我:-131071.