Предупреждение: «целочисленное преобразование приводит к усечению»
-
13-11-2019 - |
Вопрос
Я получаю предупреждение здесь.Предупреждение говорит, что «целочисленное преобразование приводит к усечению».Он сохраняется, даже если я удаляю типочку (U16).
typedef unsigned short U16;
U16 mask;
mask = ~(U16)(0x8000);
.
Как мне разрешить это предупреждение?Я использовал код ниже и удалил предупреждение, но не уверен, если его правильный способ сделать это.
mask = (U16)(~(U32)(0x8000));
.
Спасибо заранее!
Решение
C не любят, когда вы пытаетесь назначить постоянные значения в L-значение, которое недостаточно велико, чтобы удерживать их.Я догадаю, что авторы компилятора предполагают, что вы знаете, какое значение следует использовать, поскольку вы объявляете постоянную, поэтому что-то должно быть неправильно, если вы потенциально усекаете его значение.Вот решение, которое будет работать, но не может быть вашим идеальным результатом:
typedef unsigned short U16;
U16 mask;
mask = 0x7fff; //~0x8000;
.