我想做这样的事情:
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];
并没有帮助摆脱警告。 UNIT64
是unsigned long long
的typedef,应该是正确的。
有什么想法吗?
编辑3
这是VxWorks 6.9
答案 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;