编译器警告32位到64位转换

时间:2016-06-18 17:42:08

标签: casting long-integer compiler-warnings vxworks

我想做这样的事情:

UINT32 ports[2];
UINT64 puint64 = 0;    
puint64= (UINT64)ports[1]<<32 | ports[0];

但我收到警告:

  

警告(etoa:2273):分配给64位整数类型时可疑截断32位值(潜在的可移植性问题)

为什么会这样,我该如何避免呢?

修改1

这是WindRiver的diab编译器。

修改2

更改代码以使用puint64= ((UINT64)ports[1])<<32 | (UINT64)ports[0];并没有帮助摆脱警告。 UNIT64unsigned long long的typedef,应该是正确的。

有什么想法吗?

编辑3

这是VxWorks 6.9

2 个答案:

答案 0 :(得分:1)

试试这个:

params

注意每个操作的附加括号。

编辑:由于您仍然收到警告,我建议您分解每个操作,并确切地找出导致警告的操作:

//  your code
while (integerList.size() < 10) {
    Scanner input = new Scanner(System.in);
    //  your code
    try {
    //  your code
    }
    catch (InputMismatchException exc) {
        input.nextLine();
        //  your code
    }
    //  your code
}
//  your code

答案 1 :(得分:1)

我认为问题在于您将32位值移位32位。

您已尝试投射到UINT64,但投射是移位值,而不是您正在转移的值。

你需要施放然后转移,例如:

Uint32 a;
UINT64 b=((UINT64)a)<<32;