c语言强制类型转换

例子:

#include 
{

    char cChar;   //字符型变量

    short int iShort; //短整型变量

    int ilnt;           //整形变量

    float fFloat=70000;      //单精度浮点型


    cChar=(char)fFloat;     //强制转换赋值

    iShort=(short)fFloat;    //

    ilnt=(int)fFloat;           //


    printf("the char is: %c\n",cChar);   // 输出字符变量值

    printf("the short is:%ld\n",iShort);      //输出短整型变量值

    printf("the int is: %d\n",ilnt);           //输出整型变量值

    printf("the float is:%f\n",fFloat);      //输出浮点型变量值

    return 0;                                   
}

 

输出结果:

the char is: p

the short is: 4464

the int is;70000

the float is 70000.000000

 

问题:为什么float 类型的70000 转成char型变成了 p

       首先数据类型本质是什么?底层硬件最小的存储单元只有开\关两种状态,对应一个数据中就是一个bit 。 bool数据类型就占用一个bit空间,因为它只有是或否两种状态,但是我们大千世界有太多太复杂的东西需要处理,在硬件条件不变的情况下,我们只有通过更多的这种开关原件组合来表示更多的信息,因此设计编程语言的人就根据实际把数据分出来了char、int、double等类型,所以:数据类型的本质是固定大小内存块的别名。char占的内存是一个字节,也就是8bit,而70000的二进制表示是10001000101110000  char面对这个,只能按照自己的能力取了低8位来解释,所以就是01110000 就是112 在ascii码中就是p;

同理 short 占两个字节 就是16bit 取低16位解释 结果也就是4464。

重点:在开发中涉及数据赋值的时候,一定要注意数据的最大范围,把一个超过一个类型最大容量的数赋值给该类型的变量,这将存在着不确定的隐患,一个细心的有经验的工程师应该要避免写出存在这样的隐患的代码。

附:

c语言强制类型转换_第1张图片

 

 

 

 

你可能感兴趣的:(C++)