gpt4 book ai didi

c++ - (type)(math expression) 是否将表达式计算为这种类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:27 27 4
gpt4 key购买 nike

最近在处理一个竞技编程的问题,将(long long)(n*(n-1))/2改成(long long)n*( n-1)/2 产生了差异,这些东西不一样?

最佳答案

不,它们不一样。

根据 C++ Operator Precedence ,类型转换的优先级高于算术运算。

因此,表达式:

(long long)(n*(n-1))/2

由编译器评估就好像它是这样写的:

(((long long)(n*(n-1)))/2)

即,整个表达式 n*(n-1) 都在它自己的一组括号内,因此首先对其求值,然后将其结果转换为 long long,然后该结果除以 2

表达式:

(long long)n*(n-1)/2

由编译器评估就好像它是这样写的:

((((long long)n)*(n-1))/2)

即,n 不在括号内,因此它首先被自身转换为 long long,然后将结果乘以 (n-1) ,然后将结果除以 2

当不确定哪个表达式先于另一个表达式求值时,您应该使用显式括号来控制要以何种顺序执行哪些操作。

关于c++ - (type)(math expression) 是否将表达式计算为这种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57104618/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com