数据类型的本质、类型转换

(1)、数据类型的本质:

  • 概念:各种不同的数据类型,本质上是用户与系统对某一块内存数据的解释方式的约定。
  • 推论:
    • 类型转换,实际上是对先前定义时候的约定,做了一个临时的打破。
    • 理论上,可以对任意的数据做任意的类型转换,但转换之后的数据解释不一定有意义。
  • 解析:

(2)、类型转换

  • 概念:不一致但相互兼容的数据类型,在同一表达式中将会发生类型转换。
  • 转换模式:
    • 隐式转换:系统按照隐式规则自动进行的转换
    • 强制转换:用户显式自定义进行的转换
  • 隐式规则:从小类型向大类型转换,目的是保证不丢失表达式中数据的精度
  • 示例代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
    // (1)、隐式转换的示例
    // 1、加减
    char ch1  = 'a';
    int  num1 = 100;
    float f1  = 3.14;

    float f2 = ch1+num1-f1;     // 在该表达式中,所有的操作将会被提升为float
    printf("f2 == %f\n", f2);
    
    // 2、乘除(实际开发中遇到的,触摸屏的坐标(1024*600) 转为(800*480))
    float x = 200/1024*800;     // 在该表达式中,如果没有小数的参数,即执行int的int运算(int只存储整数、不存储小数)
    printf("x = %f\n", x);

    // 应改为:
    float y = 200/600.0*480;    // 在该表达式中,有小数的参与,则提升为浮点型运算(可以存储小数数据了)
    printf("y = %f\n", y);

    // (2)、强制转换的示例
    // 1、强制在int型上操作
    char ch2 = 'a';             // 单字节的整型(字符型)
    int num2 = 100;             // 四字节的整型
    float f3 = 3.14;            // 四字节的浮点型

    float f4 = ch2+num2-(int)f3 ;   // 在该表达式中,强制让其操作数降低为int型(所以精度会下降,小数不会在计算了)
    printf("f4 == %f\n", f4);


    // 2、将大作用域范围的变量,强制转换为小作用域的范围的变量
    unsigned int  num3 = 123456;        // 二进制: 0000 0000  0000 0001  1110 0010  0100 0000
    unsigned char ch3  = (char)num3;    // 二进制: 0100 0000(为什么是unsigned型?因为这样就无需考虑符号位的问题了)
    printf("ch3 == %d\n", ch3);
    printf("ch3 == %c\n", ch3);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值