Оператор '~' на short / char неявно приводит к int (C / gcc)

С gcc-Wconversion предупреждение, похоже, что символы и шорты неявно преобразуются в целые.

#include

#pragma GCC diagnostic warn "-Wconversion"

void main(void)
{
    short i = 1;
    short j = 1;
    short k = j & ~i;
    printf("value %d\n", j);
}

Выдает следующее предупреждение,

test.c: In function 'main':
test.c:9:15: warning: conversion to 'short int' from 'int' may alter its value [-Wconversion]
   short k = j & ~i;
               ^

Возвращение к короткому успокаивающему предупреждениюshort k = j & (short)~i; но это немного странно добавлять приведение, где типы переменных уже совпадают.

Я посмотрел, если дальше и(unsigned short)~(unsigned short)0 результаты в.0xffff

В то время как~(unsigned short)0 результаты в0xffffffff

Кто-нибудь может порекомендовать хороший способ справиться с этими предупреждениями?

Помимо отключения. "-Wconversion

Ответы на вопрос(1)

Ваш ответ на вопрос