我有一个小的 C 函数来转换 Fortran
baralign(n, b) {
return ((n&~(~0<<b)) ? (n&(~0<<b))+(1<<b):(n))
}
我在上面的语句中写了条件如下在 Fortran
if (IAND(n,NOT(ISHFT(NOT(0),b))))
我不确定这种情况。当我运行此代码时,它会出错说
IF clause requires a scalar LOGICAL expression.
该问题与Fortran if statement 中的 Implicit conversion integer <--> logical问题有关,但是该问题略有不同,因为那里的提问者了解问题的性质。
您不能像在 C 中那样将整数表达式放入 Fortran 中的 if 条件中
integer :: n, b
if (IAND(n,NOT(ISHFT(NOT(0),b))))
不可能。条件必须是logical
表达式。
如果整数表达式的任何非零值都应该是真的,那么你必须在那里放一个整数比较
if (IAND(n,NOT(ISHFT(NOT(0),b))) /= 0) then
如果您要求表达式恰好为 1,则可以== 1
改用。
其余的可能是
baralign = IAND(n,ISHFT(NOT(0),b)) + ISHFT(1, b)
else
baralign = n
end if
但我不知道代码的目的,所以我不能确定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句