8位无符号和8位有符号转化为更高字节类型的问题

main()
{
    unsigned char uch=0xff;    //数值为255     
    char ch=0xff;                    //数值为-1
    int i=0;                             

    i=i+uch;
    printf("%x\n",i);

    i=0;
    i=i+ch;
    printf("%x\n",i);

}

运行结果为:

ff          

ffffffff

解释:C语言将低字节类型转化高字节类型时,转化会保证转化前后所对应的数值不变,而不是保证转化后的低字节的各个比特位与之前相同、高字节为0。

为什么两者不能同时保证,那是因为计算机存储的是补码。而当要转换的是8位无符号类型时,它的补码就是原码,所以转化之后不会对高字节产生影响。

 

posted @ 2015-05-19 09:42  Elegies  阅读(490)  评论(0编辑  收藏  举报