C/C++ 数据类型扩展

来源:互联网 发布:java项目的需求分析 编辑:程序博客网 时间:2024/06/06 07:00

数据类型扩展:

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

如: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