предупреждение: «целочисленное преобразование приводит к усечению» - PullRequest
2 голосов
/ 28 февраля 2012

Я получаю предупреждение здесь.В предупреждении говорится: «Целочисленное преобразование приводит к усечению».Это сохраняется, даже если я удалю typecast (U16).

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

Как мне разрешить это предупреждение?Я использовал приведенный ниже код и удалил предупреждение, но не уверен, правильно ли это сделать.

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

Заранее спасибо!

1 Ответ

1 голос
/ 06 марта 2012

Компиляторы C не любят, когда вы пытаетесь присвоить константные значения L-значению, которое недостаточно велико для их хранения.Я предполагаю, что авторы компилятора предполагают, что вы знаете, какое значение следует использовать, поскольку вы объявляете константу, поэтому что-то должно быть не так, если вы потенциально усекаете ее значение.Вот решение, которое будет работать, но не может быть вашим идеальным результатом:

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