Pergunta

Recebo um aviso aqui.O aviso diz 'conversão inteira resulta em truncamento'.Ele persiste mesmo se eu remover o typecast (U16).

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

Como resolvo esse aviso?Usei o código abaixo e removi o aviso, mas não tenho certeza se é a maneira correta de fazer isso.

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

Desde já, obrigado!

Foi útil?

Solução

Os compiladores C não gostam quando você tenta atribuir valores constantes a um valor L que não é grande o suficiente para mantê-los.Eu acho que os autores do compilador presumem que você sabe qual valor deve ser usado, já que está declarando uma constante; portanto, algo deve estar errado se você estiver potencialmente truncando seu valor.Aqui está uma solução que funcionará, mas pode não ser o resultado ideal:

typedef unsigned short  U16;
U16 mask;
mask = 0x7fff; //~0x8000;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top