Ric*_*wal 1 c++ algorithm syntax
在以下代码中:
#include<cstdio>
#define max(a,b) (a>b?a:b)
using namespace std;
int main()
{
int f=10000000;
long long i=(long long)max(1000000,f*f);
printf("%lld",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到了输出
276447232
但如果我写
long long i=max((long long)1000000,(long long)f*f);
Run Code Online (Sandbox Code Playgroud)
我得到了输出
百兆
这两条线有什么区别?为什么在第一种情况下不会发生类型转换?
这一行说:"取这两个int值的最大值,后者将溢出.然后取结果并将其转换为long long".到了的时候long long投被称为在第一种情况下,为时已晚.有符号整数溢出是未定义的行为.
long long i=(long long)max(1000000,f*f)
Run Code Online (Sandbox Code Playgroud)
这一行说:"取这两个long long值中的最大值并将其返回".原因之所以(long long)f*f有效,是因为它优先使用第一个f转换long long到乘法之前.f然后将第二个提升long long为乘法发生.
long long i=max((long long)1000000,(long long)f*f);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |