CUDA中的逻辑转换

CUDA中的逻辑转换,cuda,bit-shift,shift,Cuda,Bit Shift,Shift,当我编译它时,我得到与第一行对应的“error:expression必须具有integral或enum类型”。除了“我”之外,所有的都有双重精度 它既不适用于左移,也不适用于右移。我用的是fedora 12,我有nvcc 3.2,V0.2.1221。对于c++(g++编译器),它可以完美地工作 但是当我试着用它的时候 rshift = ((J[i]-1)*((2*net)-J[i]) >> -1); L[i] = rshift + K[i]-J[i]; 这是“错误:表达式必须是可

当我编译它时,我得到与第一行对应的“error:expression必须具有integral或enum类型”。除了“我”之外,所有的都有双重精度

它既不适用于左移,也不适用于右移。我用的是fedora 12,我有nvcc 3.2,V0.2.1221。对于c++(g++编译器),它可以完美地工作

但是当我试着用它的时候

rshift = ((J[i]-1)*((2*net)-J[i]) >> -1);

L[i] = rshift + K[i]-J[i];

这是“错误:表达式必须是可修改的左值”,我尝试了很多,但都无法修复。有什么想法吗?

回答这个问题-CUDA C(或C,或C++)中不存在浮点类型的位移位。通过在评论中发布的问题,似乎混淆的根源是翻译某些旧式Fortran代码的错误尝试,在这些代码中也没有浮点移位支持。

我不确定我是否理解。通过对双精度浮点值执行移位,您希望实现什么?a>>=b是a=a>>b的短写;您试图将值写入不是左值(不是可修改的实体)的表达式,基本上我正在尝试将fortran程序转换为cuda@Talonmes那么你认为我应该改变rshift的定义吗@osgx thanx,我刚刚学习了逻辑移位。@Population-Xplosive:Fortran也没有浮点数的移位操作。所以无论你在翻译什么,你都误解了一些东西。@populationexplosive:对。ISHFT是一个整数位移位。在Fortran 77或更早版本中,默认情况下,名称以I、J、K、L、M或N开头的变量都是隐式整数。所有的数值常数也是整数。如果该代码段执行的不是整数位移位,我会非常惊讶。谢谢。我将(J[i]-1)*((2*net)-J[i])转换成整数并尝试移位。现在它工作得很好。
rshift = ((J[i]-1)*((2*net)-J[i]) >>= -1);

L[i] = rshift + K[i]-J[i];