char型变量强制转换成int时,会使前几 位成为0xff ff ff ,这是因为char默认是有符号的,所以char的最高位是符号位,这使转换通过补码形式变成了FF FF FF,因此在char 强制转化成int之前需要将char先强制转化成unsigned char。</p>

而且,赋值运算也有强制类型转换作用,因此,转化之后要赋给正确的变量。</wbr></p>

 这里有一个小程序能说明它们得关系:</p>

#include
#include

</p>

int main (int argc, char const* argv[]) {
    unsigned char c=-8;
    printf("%xn",c);
    char d=-8;
    printf("%xn",d);</p>

     return 0;</p>

}
</p>


</p>

结果是:f8</p>

          ffffff80</p>

     -8是int型,转化为usigned char需截取低位,11111111 11111111 11111111 1000</span>后8位即是0x f8,转换为int型输出为0x 000000f8.</p>

   第二个是有符号int,相当-8转换为补码输出。
</p>

    
</p>


</p>


</p>


</p></div></div>