2012-02-28 110 views
2

我这里得到一个警告。警告说'整数转换导致截断'。即使我删除了类型转换(U16),它仍然存在。警告:“整数转换导致截断”

typedef unsigned short U16; 
U16 mask; 
mask = ~(U16)(0x8000); 

如何解决此警告?我用下面的代码并删除了警告,但不确定其是否以正确的方式来做到这一点。

mask = (U16)(~(U32)(0x8000)); 

在此先感谢!当您尝试常量指定为L值,这不是大到足以容纳他们

回答

1

C编译器不喜欢。我猜想,编译器作者假设你知道,因为你宣布一个常数应该使用什么样的价值,因此一定出事了,如果你可能截断它的价值。这里有一个解决方案可以工作,但可能不会是你理想的结果:

typedef unsigned short U16; 
U16 mask; 
mask = 0x7fff; //~0x8000; 
+0

我不得不避免这种情况,因为代码是不可读的。然而,这是为了避免编译错误,无需复杂的代码,最好的和唯一的解决办法! – Aadishri 2012-03-13 10:41:16

相关问题