C/C++ 数据类型扩展

数据类型扩展:

    定义的数据类型的值与定义的数据类型无关,只与最后输出形式有关。

如:char c=128;printf("c=%u",c),c=4294967168(0xFFFFFF80);         printf("c=%d",c),输出为c=-128;

char c=64;printf("c=%u",c),c=64(0x00000040);         printf("c=%d",c),输出为c=64;

unsigned short i=10;printf("~i=%u",~i)~i=4294967285(0xFFFFFFF5);   printf("~i=%d",~i),~i=-11;

其中涉及到数据类型的扩展,符号扩展规律就是“对于无符号整型数据,要扩展成符号位的话,就是将扩展位补零,其他位保持不变。但对于有符号整型数据的符号扩展规律就是:原来符号位为1时,符号扩展位补1;原来符号位为0时,符号扩展位补0;其他位保持不变。”

定义为字符型时,先扩展为int型:char型扩展属于有符号扩展,c=128=0x80,最高位也就是符号位为1,扩展成int型后c=0xFFFFFF80;c=64=0x40,符号位为0,扩展成int型后c=0x00000040;这里就是原来符号位为1时,符号扩展位补1;原来符号位为0时,符号扩展位补0;其他位保持不变

在计算机中采用补码保存数据,若为无符号输出或最高位为0(正数),原码与补码相同,若为有符号输出,看最高位,若为1,表示为负数,求取原码,c的原码=补码按位取反(除符号位外)+1(注:原码-补码之间的相互转换规则相同)=0x80000080;所以输出为-128;

定义为无符号短整型时,先扩展为int型:i=10=0x0A,扩展成int型,符号扩展位为0,扩展后i=0x0000000A;~i=0xFFFFFFF5;原码=0x8000000B==-11;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值