Предупреждение: «целочисленное преобразование приводит к усечению»

StackOverflow https://stackoverflow.com/questions/9479403

Вопрос

Я получаю предупреждение здесь.Предупреждение говорит, что «целочисленное преобразование приводит к усечению».Он сохраняется, даже если я удаляю типочку (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;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top