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位无符号类型时,它的补码就是原码,所以转化之后不会对高字节产生影响。

 

转载于:https://www.cnblogs.com/2seek/p/4513706.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值