short / char上的'〜'运算符隐式转换为int(C / gcc)

时间:2013-08-31 23:54:20

标签: c casting

使用gcc的-Wconversion警告,看起来chars和short被隐式转换为整数。

#include<stdio.h>

#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 个答案:

答案 0 :(得分:7)

根据C标准(6.5.3.3)整数促销~的操作数上执行,结果属于提升类型。整数提升(6.3.1.1)基本上表示所有小于int的整数类型都会提升为int(如果int可以表示原始类型的所有值)或{{1} (否则)。