相关疑难解决方法(0)

为什么在C和C++中算术运算之前必须将short转换为int?

从我从得到的回答这个问题,看来C++继承了这一要求,对于转换shortint从C.执行算术运算时,我可以挑你的大脑,以为什么这是用C首先介绍?为什么不做这些操作short呢?

例如(取自评论中的dyp建议):

short s = 1, t = 2 ;
auto  x = s + t ;
Run Code Online (Sandbox Code Playgroud)

x将具有int类型.

c c++ int short integer-promotion

70
推荐指数
4
解决办法
8650
查看次数

如何以标准/便携和高效的方式编写int64 = int32*int32?

相关: 这对int64_t的处理是GCC和Clang的错误吗?

我能想到的唯一解决方案是将其中一个操作数显式转换为int64,至少也要强制产品int64.

但是如果以这种方式完成,则由编译器的智能实际做到int64*int32,或者int64*int64,或者理想情况下,将其优化回来int32*int32.

如在相关问题讨论,分配的结果int32*int32,以int64不改变的事实int32*int32已经引起UB.

任何想法?

c c++

2
推荐指数
2
解决办法
463
查看次数

为什么将int隐式转换为long long int会在C++中给出意想不到的答案?

我从阅读转换intlong 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)

上面的代码给了我一个负值.有人可以解释原因吗?

c++ type-conversion

2
推荐指数
2
解决办法
353
查看次数

long long int 不支持较大数的乘法

我正在尝试执行一个简单的长乘法,但没有显示正确的输出。这是示例代码

'''
#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 是:41006540​​8

我不知道为什么它显示垃圾值而不是 9000000000。

c++

1
推荐指数
1
解决办法
100
查看次数

为什么double不存储两个int的乘积

我试图了解数字如何存储在计算机内存中的基本知识.因此我最近选择了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.

c++

0
推荐指数
1
解决办法
76
查看次数

标签 统计

c++ ×5

c ×2

int ×1

integer-promotion ×1

short ×1

type-conversion ×1